tutanus 0.13.1 → 0.13.3
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/README.md +5 -5
- package/dist/analysts/corrections/reorganize-barrels.d.ts.map +1 -1
- package/dist/analysts/corrections/reorganize-barrels.js +29 -6
- package/dist/analysts/corrections/reorganize-barrels.js.map +1 -1
- package/dist/analysts/html/analysts/analyst-html.js.map +1 -1
- package/dist/analysts/js-ts/analysts/analyst-commands-cli.d.ts.map +1 -1
- package/dist/analysts/js-ts/analysts/analyst-commands-cli.js.map +1 -1
- package/dist/app/github/app/index.d.ts +6 -0
- package/dist/app/github/app/index.d.ts.map +1 -1
- package/dist/app/github/app/index.js +6 -0
- package/dist/app/github/app/index.js.map +1 -1
- package/dist/app/github/app/setup-routes.d.ts.map +1 -1
- package/dist/app/github/app/setup-routes.js +0 -1
- package/dist/app/github/app/setup-routes.js.map +1 -1
- package/dist/app/github/dashboard/index.d.ts +2 -0
- package/dist/app/github/dashboard/index.d.ts.map +1 -1
- package/dist/app/github/dashboard/index.js +2 -0
- package/dist/app/github/dashboard/index.js.map +1 -1
- package/dist/app/github/dashboard/layout.d.ts +5 -0
- package/dist/app/github/dashboard/layout.d.ts.map +1 -0
- package/dist/app/github/dashboard/layout.js +5 -0
- package/dist/app/github/dashboard/layout.js.map +1 -0
- package/dist/app/github/dashboard/page.d.ts +3 -0
- package/dist/app/github/dashboard/page.d.ts.map +1 -0
- package/dist/app/github/dashboard/page.js +10 -0
- package/dist/app/github/dashboard/page.js.map +1 -0
- package/dist/app/github/jobs/index.d.ts +1 -0
- package/dist/app/github/jobs/index.d.ts.map +1 -1
- package/dist/app/github/jobs/index.js +1 -0
- package/dist/app/github/jobs/index.js.map +1 -1
- package/dist/cli/commands/command-marketplace.js +1 -1
- package/dist/cli/commands/command-marketplace.js.map +1 -1
- package/dist/licenses/index.d.ts +2 -1
- package/dist/licenses/index.d.ts.map +1 -1
- package/dist/licenses/index.js +1 -0
- package/dist/licenses/index.js.map +1 -1
- package/dist/licenses/policy.d.ts +5 -0
- package/dist/licenses/policy.d.ts.map +1 -0
- package/dist/licenses/policy.js +60 -0
- package/dist/licenses/policy.js.map +1 -0
- package/dist/licenses/scanner.d.ts +4 -2
- package/dist/licenses/scanner.d.ts.map +1 -1
- package/dist/licenses/scanner.js +10 -2
- package/dist/licenses/scanner.js.map +1 -1
- package/dist/shared/marketplace/remote.js +1 -1
- package/dist/shared/marketplace/remote.js.map +1 -1
- package/dist/types/licenses/licenses.d.ts +8 -0
- package/dist/types/licenses/licenses.d.ts.map +1 -1
- package/dist/types/licenses/licenses.js.map +1 -1
- package/package.json +6 -8
- package/out/404/index.html +0 -1
- package/out/404.html +0 -1
- package/out/__next.__PAGE__.txt +0 -25
- package/out/__next._full.txt +0 -37
- package/out/__next._head.txt +0 -5
- package/out/__next._index.txt +0 -6
- package/out/__next._tree.txt +0 -4
- package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_buildManifest.js +0 -11
- package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_clientMiddlewareManifest.js +0 -1
- package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_ssgManifest.js +0 -1
- package/out/_next/static/chunks/05-c3ty_6dwfk.js +0 -1
- package/out/_next/static/chunks/0cz1d0mv5g_q7.js +0 -1
- package/out/_next/static/chunks/1061ff024jzvu.js +0 -2
- package/out/_next/static/chunks/14mrh2-p_w84d.js +0 -1
- package/out/_next/static/chunks/15orcrkp-_9ct.js +0 -4
- package/out/_next/static/chunks/1jq4o6yq14o4c.js +0 -31
- package/out/_next/static/chunks/1rxncug86bump.js +0 -1
- package/out/_next/static/chunks/2n-4qa9h44lgj.js +0 -1
- package/out/_next/static/chunks/39aw8cj-oq89z.js +0 -11
- package/out/_next/static/chunks/3n7dm2ojtyzwn.js +0 -1
- package/out/_next/static/chunks/3uta7d_6k863-.css +0 -1
- package/out/_next/static/chunks/turbopack-2xb6mmb6_q43u.js +0 -1
- package/out/_next/static/media/icon-1.008jpsm4iakzh.png +0 -0
- package/out/_not-found/__next._full.txt +0 -16
- package/out/_not-found/__next._head.txt +0 -5
- package/out/_not-found/__next._index.txt +0 -6
- package/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/out/_not-found/__next._not-found.txt +0 -5
- package/out/_not-found/__next._tree.txt +0 -3
- package/out/_not-found/index.html +0 -1
- package/out/_not-found/index.txt +0 -16
- package/out/changelog/__next._full.txt +0 -573
- package/out/changelog/__next._head.txt +0 -5
- package/out/changelog/__next._index.txt +0 -6
- package/out/changelog/__next._tree.txt +0 -4
- package/out/changelog/__next.changelog.__PAGE__.txt +0 -560
- package/out/changelog/__next.changelog.txt +0 -5
- package/out/changelog/index.html +0 -550
- package/out/changelog/index.txt +0 -573
- package/out/github/dashboard/__next._full.txt +0 -20
- package/out/github/dashboard/__next._head.txt +0 -5
- package/out/github/dashboard/__next._index.txt +0 -6
- package/out/github/dashboard/__next._tree.txt +0 -3
- package/out/github/dashboard/__next.github.dashboard.__PAGE__.txt +0 -9
- package/out/github/dashboard/__next.github.dashboard.txt +0 -4
- package/out/github/dashboard/__next.github.txt +0 -5
- package/out/github/dashboard/index.html +0 -1
- package/out/github/dashboard/index.txt +0 -20
- package/out/index.html +0 -1
- package/out/index.txt +0 -37
- package/out/privacy-policy/__next._full.txt +0 -38
- package/out/privacy-policy/__next._head.txt +0 -5
- package/out/privacy-policy/__next._index.txt +0 -6
- package/out/privacy-policy/__next._tree.txt +0 -4
- package/out/privacy-policy/__next.privacy-policy.__PAGE__.txt +0 -23
- package/out/privacy-policy/__next.privacy-policy.txt +0 -5
- package/out/privacy-policy/index.html +0 -1
- package/out/privacy-policy/index.txt +0 -38
- package/out/terms-of-use/__next._full.txt +0 -37
- package/out/terms-of-use/__next._head.txt +0 -5
- package/out/terms-of-use/__next._index.txt +0 -6
- package/out/terms-of-use/__next._tree.txt +0 -4
- package/out/terms-of-use/__next.terms-of-use.__PAGE__.txt +0 -18
- package/out/terms-of-use/__next.terms-of-use.txt +0 -5
- package/out/terms-of-use/index.html +0 -1
- package/out/terms-of-use/index.txt +0 -37
- package/scripts/license.json +0 -53
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyst-html.js","sourceRoot":"","sources":["../../../../src/analysts/html/analysts/analyst-html.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { messages } from '@core/messages';\nimport { createLineLookup, maskHtmlComments, maskTagBlocks } from '@shared/helpers';\nimport type { AnyNode, Document, Element, Text } from 'domhandler';\nimport { parseDocument } from 'htmlparser2';\n\nimport { criarAnalista, criarOcorrencia } from '@';\n\nconst disableEnv = process.env.TUTANUS_DISABLE_PLUGIN_HTML === '1';\ntype Msg = ReturnType<typeof criarOcorrencia>;\nfunction warn(message: string, relPath: string, line?: number): Msg {\n return criarOcorrencia({ relPath, mensagem: message, linha: line, nivel: messages.SeverityNiveis.warning, origem: messages.AnalystOrigens.html, tipo: messages.AnalystTipos.html });\n}\nfunction isElement(node: AnyNode): node is Element { return node.type === 'tag'; }\nfunction getAttr(el: Element, name: string): string {\n const attrs = el.attribs || {};\n const valor = attrs[name] ?? attrs[name.toLowerCase()] ?? '';\n return typeof valor === 'string' ? valor : '';\n}\nfunction walk(node: AnyNode, visit: (node: AnyNode) => void) {\n visit(node);\n const children = (node as { children?: AnyNode[] }).children;\n if (Array.isArray(children)) {\n for (const elem of children) walk(elem, visit);\n }\n}\nconst INLINE_EVENTS = new Set(['onclick', 'onchange', 'onsubmit', 'onload', 'onerror', 'onmouseover', 'onmouseout', 'onkeyup', 'onkeydown', 'onfocus', 'onblur', 'oninput']);\nfunction checkDoctype(node: AnyNode): boolean | null {\n if (node.type !== 'directive') return null;\n const data = String((node as { data?: string }).data || '');\n return /^!doctype\\s+html\\b/i.test(data);\n}\n\nfunction validarButton(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const text = node.children?.some(elem => elem.type === 'text' && String((elem as Text).data || '').trim().length > 0);\n if (!text && !getAttr(node, 'aria-label') && !getAttr(node, 'title')) {\n ocorrencias.push(warn(messages.HtmlMensagens.buttonWithoutText, relPath, line));\n }\n}\nfunction validarTable(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const hasCaption = node.children?.some(elem => elem.type === 'tag' && String((elem as Element).name).toLowerCase() === 'caption');\n if (!hasCaption && !getAttr(node, 'aria-label')) {\n ocorrencias.push(warn(messages.HtmlMensagens.tableWithoutCaption, relPath, line));\n }\n}\nfunction validarIframe(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n if (!getAttr(node, 'title')) {\n ocorrencias.push(warn(messages.HtmlMensagens.iframeWithoutTitle, relPath, line));\n }\n}\nfunction validarLink(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const target = getAttr(node, 'target');\n if (target === '_blank' && !/(noopener|noreferrer)/i.test(getAttr(node, 'rel'))) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkTargetBlank, relPath, line));\n }\n const attrs = node.attribs || {};\n const hasHref = Object.prototype.hasOwnProperty.call(attrs, 'href');\n const href = getAttr(node, 'href');\n if (hasHref && href !== '' && href !== '#') return;\n const hasOnClick = Object.keys(attrs).some(chave => chave.toLowerCase() === 'onclick');\n const isRoleButton = getAttr(node, 'role').toLowerCase() === 'button';\n if (!hasOnClick && !isRoleButton && !getAttr(node, 'tabindex')) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkNoHref, relPath, line));\n }\n}\nfunction validarImg(node: Element, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean) {\n const alt = getAttr(node, 'alt');\n const ariaLabel = !!getAttr(node, 'aria-label');\n const ariaHidden = getAttr(node, 'aria-hidden').toLowerCase() === 'true';\n const role = getAttr(node, 'role').toLowerCase();\n const decorative = ariaHidden || ariaLabel || role === 'presentation' || role === 'none';\n const attrs = node.attribs || {};\n const dataAttr = Object.keys(attrs).some(chave => /^(data-)?(decorative|icon|symbol)$/i.test(chave));\n if (!alt && !decorative && !dataAttr && !/\\.svg(\\?|#|$)/i.test(getAttr(node, 'src'))) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutAlt, relPath, line));\n }\n if (!getAttr(node, 'loading') && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutLoading, relPath, line));\n }\n if (!getAttr(node, 'width') || !getAttr(node, 'height')) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutDimensions, relPath, line));\n }\n}\nfunction validarForm(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n if (!getAttr(node, 'method')) ocorrencias.push(warn(messages.HtmlMensagens.formWithoutMethod, relPath, line));\n const attrs = node.attribs || {};\n if (!getAttr(node, 'action') && !Object.keys(attrs).some(chave => chave.toLowerCase().startsWith('data-'))) {\n ocorrencias.push(warn(messages.HtmlMensagens.formWithoutAction, relPath, line));\n }\n}\nfunction validarInput(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const type = getAttr(node, 'type').toLowerCase();\n const isHidden = type === 'hidden';\n const isButton = type === 'button' || type === 'submit' || type === 'reset';\n if (!isHidden && !isButton && !getAttr(node, 'aria-label') && !getAttr(node, 'name')) {\n ocorrencias.push(warn(messages.HtmlMensagens.inputWithoutLabel, relPath, line));\n }\n if (!type) ocorrencias.push(warn(messages.HtmlMensagens.inputWithoutType, relPath, line));\n if (type === 'password' && !getAttr(node, 'autocomplete')) {\n ocorrencias.push(warn(messages.HtmlMensagens.passwordWithoutAutocomplete, relPath, line));\n }\n}\nfunction validarScript(node: Element, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean) {\n const srcAttr = getAttr(node, 'src');\n const children = node.children || [];\n const text = children.filter((elem): elem is Text => elem.type === 'text').map(elem => String((elem as Text).data || '')).join('');\n if (!srcAttr && text.trim().length > 0) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineScript, relPath, line));\n if (text.length > 1000) ocorrencias.push(warn(messages.HtmlMensagens.largeInlineScript, relPath, line));\n }\n if (srcAttr && !isTemplate && !getAttr(node, 'defer') && !getAttr(node, 'async')) {\n ocorrencias.push(warn(messages.HtmlMensagens.scriptWithoutDefer, relPath, line));\n }\n}\nfunction validarStyle(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const children = node.children || [];\n const text = children.filter((elem): elem is Text => elem.type === 'text').map(elem => String((elem as Text).data || '')).join('');\n if (text.trim().length > 0) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineStyle, relPath, line));\n }\n}\n\nconst validadores: Record<string, (node: Element, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean) => void> = {\n button: validarButton,\n table: validarTable,\n iframe: validarIframe,\n a: validarLink,\n img: validarImg,\n form: validarForm,\n input: validarInput,\n script: validarScript,\n style: validarStyle,\n};\n\nfunction validateNode(node: Element, tag: string, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean): void {\n const validador = validadores[tag];\n if (validador) validador(node, line, relPath, ocorrencias, isTemplate);\n const attrs = node?.attribs || {};\n if (Object.keys(attrs).some(attr => INLINE_EVENTS.has(attr.toLowerCase()))) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineHandler, relPath, line));\n }\n}\nfunction verificarDocumento(\n ocorrencias: Msg[],\n relPath: string,\n hasDoctype: boolean,\n htmlLangOk: boolean,\n hasCharset: boolean,\n hasViewport: boolean,\n hasTitle: boolean,\n h1Contagem: number,\n isTemplate: boolean\n): void {\n if (isTemplate) return;\n if (!hasDoctype) ocorrencias.push(warn(messages.HtmlMensagens.doctype, relPath, 1));\n if (!htmlLangOk) ocorrencias.push(warn(messages.HtmlMensagens.htmlLang, relPath, 1));\n if (!hasCharset) ocorrencias.push(warn(messages.HtmlMensagens.metaCharset, relPath, 1));\n if (!hasViewport) ocorrencias.push(warn(messages.HtmlMensagens.viewport, relPath, 1));\n if (!hasTitle) ocorrencias.push(warn(messages.HtmlMensagens.title, relPath, 1));\n if (h1Contagem > 1) ocorrencias.push(warn(messages.HtmlMensagens.multipleH1, relPath, 1));\n}\nfunction collectHtmlIssuesAst(src: string, relPath: string): Msg[] {\n const ocorrencias: Msg[] = [];\n const isTemplate = /\\.(template\\.html|\\.component\\.html)$/i.test(relPath);\n const lineOf = createLineLookup(src).lineAt;\n const doc = parseDocument(src, {\n xmlMode: false,\n withStartIndices: true,\n withEndIndices: true,\n recognizeSelfClosing: true\n });\n let hasDoctype = false;\n let hasTitle = false;\n let hasViewport = false;\n let hasCharset = false;\n let htmlLangOk = false;\n let lastHeadingNivel = 0;\n let h1Contagem = 0;\n const startLineOf = (node: AnyNode) => lineOf((node as { startIndex?: number | null }).startIndex ?? 0);\n walk(doc as AnyNode, node => {\n const doctype = checkDoctype(node);\n if (doctype !== null) { hasDoctype = doctype; return; }\n if (!isElement(node)) return;\n const tag = String(node.name || '').toLowerCase();\n const line = startLineOf(node);\n if (tag === 'title' && !isTemplate) hasTitle = true;\n if (tag === 'html' && !isTemplate && getAttr(node, 'lang')) htmlLangOk = true;\n if (tag === 'meta' && !isTemplate) {\n if (getAttr(node, 'charset') || (getAttr(node, 'http-equiv').toLowerCase() === 'content-type' && /charset\\s*=\\s*utf-8/i.test(getAttr(node, 'content')))) hasCharset = true;\n if (getAttr(node, 'name').toLowerCase() === 'viewport') hasViewport = true;\n }\n if (/^h[1-6]$/.test(tag) && !isTemplate) {\n const level = parseInt(tag.charAt(1), 10);\n if (level === 1) h1Contagem++;\n if (level > lastHeadingNivel + 1 && lastHeadingNivel > 0) {\n ocorrencias.push(warn(messages.HtmlMensagens.headingSkipped(level, lastHeadingNivel + 1), relPath, line));\n }\n lastHeadingNivel = level;\n }\n validateNode(node, tag, line, relPath, ocorrencias, isTemplate);\n });\n verificarDocumento(ocorrencias, relPath, hasDoctype, htmlLangOk, hasCharset, hasViewport, hasTitle, h1Contagem, isTemplate);\n return ocorrencias;\n}\nfunction checkDocTypeRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n if (!/<!DOCTYPE\\s+html>/i.test(scan) && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.doctype, relPath, 1));\n }\n}\nfunction checkHtmlLangRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n const htmlTag = scan.match(/<html[^>]*>/i);\n if (htmlTag && !isTemplate) {\n const hasLang = /\\slang=['\"][^'\" >]+['\"]/i.test(htmlTag[0]);\n if (!hasLang) {\n ocorrencias.push(warn(messages.HtmlMensagens.htmlLang, relPath, lineOfMasked(htmlTag.index ?? 0)));\n }\n }\n}\nfunction checkMetaCharsetRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n const hasCharsetAttr = /<meta\\s+[^>]*\\bcharset\\s*=\\s*['\"]?[^'\">\\s]+/i.test(scan);\n const hasCharsetInContentTipo = /<meta\\s+[^>]*http-equiv\\s*=\\s*['\"]content-type['\"][^>]*>/i.test(scan) && /charset\\s*=\\s*utf-8/i.test(scan);\n if (!hasCharsetAttr && !hasCharsetInContentTipo && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.metaCharset, relPath, 1));\n }\n}\nfunction checkViewportRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n if (!/<meta\\s+[^>]*name=[\"']viewport[\"']/i.test(scan) && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.viewport, relPath, 1));\n }\n}\nfunction checkTitleRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n if (!/<title>[^<]*<\\/title>/i.test(scan) && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.title, relPath, 1));\n }\n}\nfunction checkLinkTargetBlankRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<a[^>]*target=['\"]?_blank['\"]?[^>]*>/gi)) {\n const hasRelSafe = /rel=['\"][^'\"]*(noopener|noreferrer)[^'\"]*['\"]/i.test(metrica[0]);\n if (!hasRelSafe) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkTargetBlank, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkImgAltRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<img[^>]*>/gi)) {\n const isSvg = /\\.svg/i.test(metrica[0]);\n const hasAlt = /\\salt=/.test(metrica[0]);\n const ariaHidden = /\\saria-hidden=['\"]true['\"]/i.test(metrica[0]);\n const ariaLabel = /\\saria-label=/i.test(metrica[0]);\n const rolePresentation = /\\srole=['\"](presentation|none)['\"]/i.test(metrica[0]);\n const dataAttr = /\\s(?:data-)?(?:decorative|icon|symbol)=/i.test(metrica[0]);\n if (!hasAlt && !ariaHidden && !ariaLabel && !rolePresentation && !dataAttr && !isSvg) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutAlt, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkInlineHandlerRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/\\son(?:click|change|submit|load|error|mouseover|mouseout|keyup|keydown|focus|blur|input)=/gi)) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineHandler, relPath, lineOfMasked(metrica.index)));\n }\n}\nfunction checkFormRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<form[^>]*>/gi)) {\n const hasMethod = /\\smethod=/i.test(metrica[0]);\n const hasAction = /\\saction=/i.test(metrica[0]);\n if (!hasMethod) {\n ocorrencias.push(warn(messages.HtmlMensagens.formWithoutMethod, relPath, lineOfMasked(metrica.index)));\n }\n if (!hasAction && !/<form[^>]*data-/i.test(metrica[0])) {\n ocorrencias.push(warn(messages.HtmlMensagens.formWithoutAction, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkInputRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<input[^>]*>/gi)) {\n const hasAriaLabel = /\\saria-label=/i.test(metrica[0]);\n const hasNome = /\\sname=/i.test(metrica[0]);\n const isHidden = /\\stype=['\"]?hidden['\"]?/i.test(metrica[0]);\n const isButton = /\\stype=['\"]?(button|submit|reset)['\"]/i.test(metrica[0]);\n if (!isHidden && !isButton && !hasAriaLabel && !hasNome) {\n ocorrencias.push(warn(messages.HtmlMensagens.inputWithoutLabel, relPath, lineOfMasked(metrica.index)));\n }\n if (/\\stype=['\"]?password['\"]?\\s/.test(metrica[0]) && !/\\sautocomplete=/i.test(metrica[0])) {\n ocorrencias.push(warn(messages.HtmlMensagens.passwordWithoutAutocomplete, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkLinkNoHrefRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<a[^>]*>/gi)) {\n const hasHref = /\\shref=/.test(metrica[0]);\n const href = /\\shref=['\"]([^'\"]*)['\"]/i.exec(metrica[0]);\n if (!hasHref || href?.[1] === '' || href?.[1] === '#') {\n const hasOnClick = /\\sonclick\\s*=/.test(metrica[0]);\n const hasRoleButton = /\\srole=['\"]button['\"]/i.test(metrica[0]);\n const hasTabIndex = /\\stabindex\\s*=/.test(metrica[0]);\n if (!hasOnClick && !hasRoleButton && !hasTabIndex) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkNoHref, relPath, lineOfMasked(metrica.index)));\n }\n }\n }\n}\nfunction checkInlineScriptRegex(src: string, scanNoScriptStyle: string, relPath: string, ocorrencias: Msg[], lineOfScan: (idx: number) => number): void {\n for (const metrica of src.matchAll(/<script[^>]*>[\\s\\S]*?<\\/\\s*script\\b[^>]*\\s*>/gi)) {\n if (typeof metrica.index === 'number') {\n const idx = metrica.index;\n if ((scanNoScriptStyle[idx] ?? ' ') !== '<') continue;\n }\n const isExternal = /\\ssrc=/.test(metrica[0]);\n const innerScriptContent = metrica[0].replace(/^[\\s\\S]*?<script\\b[^>]*>/i, '').replace(/<\\/\\s*script\\b[^>]*\\s*>[\\s\\S]*$/i, '');\n const isEmpty = innerScriptContent.trim().length === 0;\n if (!isExternal && !isEmpty) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineScript, relPath, lineOfScan(metrica.index)));\n }\n }\n}\nfunction checkInlineStyleRegex(src: string, scanNoScriptStyle: string, relPath: string, ocorrencias: Msg[], lineOfScan: (idx: number) => number): void {\n for (const metrica of src.matchAll(/<style[^>]*>[\\s\\S]*?<\\/\\s*style\\b[^>]*\\s*>/gi)) {\n if (typeof metrica.index === 'number') {\n const idx = metrica.index;\n if ((scanNoScriptStyle[idx] ?? ' ') !== '<') continue;\n }\n const isEmpty = /<style\\b[^>]*>\\s*<\\/\\s*style[^>]*>/i.test(metrica[0]);\n if (!isEmpty) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineStyle, relPath, lineOfScan(metrica.index)));\n }\n }\n}\nfunction collectHtmlIssuesRegex(src: string, relPath: string): Msg[] {\n const ocorrencias: Msg[] = [];\n const isTemplate = /\\.(template\\.html|\\.component\\.html)$/i.test(relPath);\n const lineOfScan = createLineLookup(src).lineAt;\n const scan = maskHtmlComments(maskTagBlocks(maskTagBlocks(src, 'script'), 'style'));\n const lineOfMasked = createLineLookup(scan).lineAt;\n const scanNoScriptStyle = maskHtmlComments(src);\n checkDocTypeRegex(scan, relPath, isTemplate, ocorrencias);\n checkHtmlLangRegex(scan, relPath, isTemplate, ocorrencias, lineOfMasked);\n checkMetaCharsetRegex(scan, relPath, isTemplate, ocorrencias);\n checkViewportRegex(scan, relPath, isTemplate, ocorrencias);\n checkTitleRegex(scan, relPath, isTemplate, ocorrencias);\n checkLinkTargetBlankRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkImgAltRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkInlineHandlerRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkFormRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkInputRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkLinkNoHrefRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkInlineScriptRegex(src, scanNoScriptStyle, relPath, ocorrencias, lineOfScan);\n checkInlineStyleRegex(src, scanNoScriptStyle, relPath, ocorrencias, lineOfScan);\n return ocorrencias;\n}\nfunction collectHtmlIssues(src: string, relPath: string): Msg[] {\n try {\n return collectHtmlIssuesAst(src, relPath);\n } catch {\n return collectHtmlIssuesRegex(src, relPath);\n }\n}\nexport const analistaHtml = criarAnalista({\n nome: 'analista-html',\n categoria: 'markup',\n descricao: 'Heurísticas leves para HTML com convenções padrão.',\n global: false,\n test: (relPath: string): boolean => /\\.(html|htm)$/i.test(relPath),\n aplicar: async (src, relPath): Promise<Msg[] | null> => {\n if (disableEnv) return null;\n const msgs = collectHtmlIssues(src, relPath);\n return msgs.length ? msgs : null;\n }\n});\n"]}
|
|
1
|
+
{"version":3,"file":"analyst-html.js","sourceRoot":"","sources":["../../../../src/analysts/html/analysts/analyst-html.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { messages } from '@core/messages';\nimport { createLineLookup, maskHtmlComments, maskTagBlocks } from '@shared/helpers';\nimport type { AnyNode, Element, Text } from 'domhandler';\nimport { parseDocument } from 'htmlparser2';\n\nimport { criarAnalista, criarOcorrencia } from '@';\n\nconst disableEnv = process.env.TUTANUS_DISABLE_PLUGIN_HTML === '1';\ntype Msg = ReturnType<typeof criarOcorrencia>;\nfunction warn(message: string, relPath: string, line?: number): Msg {\n return criarOcorrencia({ relPath, mensagem: message, linha: line, nivel: messages.SeverityNiveis.warning, origem: messages.AnalystOrigens.html, tipo: messages.AnalystTipos.html });\n}\nfunction isElement(node: AnyNode): node is Element { return node.type === 'tag'; }\nfunction getAttr(el: Element, name: string): string {\n const attrs = el.attribs || {};\n const valor = attrs[name] ?? attrs[name.toLowerCase()] ?? '';\n return typeof valor === 'string' ? valor : '';\n}\nfunction walk(node: AnyNode, visit: (node: AnyNode) => void) {\n visit(node);\n const children = (node as { children?: AnyNode[] }).children;\n if (Array.isArray(children)) {\n for (const elem of children) walk(elem, visit);\n }\n}\nconst INLINE_EVENTS = new Set(['onclick', 'onchange', 'onsubmit', 'onload', 'onerror', 'onmouseover', 'onmouseout', 'onkeyup', 'onkeydown', 'onfocus', 'onblur', 'oninput']);\nfunction checkDoctype(node: AnyNode): boolean | null {\n if (node.type !== 'directive') return null;\n const data = String((node as { data?: string }).data || '');\n return /^!doctype\\s+html\\b/i.test(data);\n}\n\nfunction validarButton(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const text = node.children?.some(elem => elem.type === 'text' && String((elem as Text).data || '').trim().length > 0);\n if (!text && !getAttr(node, 'aria-label') && !getAttr(node, 'title')) {\n ocorrencias.push(warn(messages.HtmlMensagens.buttonWithoutText, relPath, line));\n }\n}\nfunction validarTable(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const hasCaption = node.children?.some(elem => elem.type === 'tag' && String((elem as Element).name).toLowerCase() === 'caption');\n if (!hasCaption && !getAttr(node, 'aria-label')) {\n ocorrencias.push(warn(messages.HtmlMensagens.tableWithoutCaption, relPath, line));\n }\n}\nfunction validarIframe(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n if (!getAttr(node, 'title')) {\n ocorrencias.push(warn(messages.HtmlMensagens.iframeWithoutTitle, relPath, line));\n }\n}\nfunction validarLink(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const target = getAttr(node, 'target');\n if (target === '_blank' && !/(noopener|noreferrer)/i.test(getAttr(node, 'rel'))) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkTargetBlank, relPath, line));\n }\n const attrs = node.attribs || {};\n const hasHref = Object.prototype.hasOwnProperty.call(attrs, 'href');\n const href = getAttr(node, 'href');\n if (hasHref && href !== '' && href !== '#') return;\n const hasOnClick = Object.keys(attrs).some(chave => chave.toLowerCase() === 'onclick');\n const isRoleButton = getAttr(node, 'role').toLowerCase() === 'button';\n if (!hasOnClick && !isRoleButton && !getAttr(node, 'tabindex')) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkNoHref, relPath, line));\n }\n}\nfunction validarImg(node: Element, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean) {\n const alt = getAttr(node, 'alt');\n const ariaLabel = !!getAttr(node, 'aria-label');\n const ariaHidden = getAttr(node, 'aria-hidden').toLowerCase() === 'true';\n const role = getAttr(node, 'role').toLowerCase();\n const decorative = ariaHidden || ariaLabel || role === 'presentation' || role === 'none';\n const attrs = node.attribs || {};\n const dataAttr = Object.keys(attrs).some(chave => /^(data-)?(decorative|icon|symbol)$/i.test(chave));\n if (!alt && !decorative && !dataAttr && !/\\.svg(\\?|#|$)/i.test(getAttr(node, 'src'))) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutAlt, relPath, line));\n }\n if (!getAttr(node, 'loading') && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutLoading, relPath, line));\n }\n if (!getAttr(node, 'width') || !getAttr(node, 'height')) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutDimensions, relPath, line));\n }\n}\nfunction validarForm(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n if (!getAttr(node, 'method')) ocorrencias.push(warn(messages.HtmlMensagens.formWithoutMethod, relPath, line));\n const attrs = node.attribs || {};\n if (!getAttr(node, 'action') && !Object.keys(attrs).some(chave => chave.toLowerCase().startsWith('data-'))) {\n ocorrencias.push(warn(messages.HtmlMensagens.formWithoutAction, relPath, line));\n }\n}\nfunction validarInput(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const type = getAttr(node, 'type').toLowerCase();\n const isHidden = type === 'hidden';\n const isButton = type === 'button' || type === 'submit' || type === 'reset';\n if (!isHidden && !isButton && !getAttr(node, 'aria-label') && !getAttr(node, 'name')) {\n ocorrencias.push(warn(messages.HtmlMensagens.inputWithoutLabel, relPath, line));\n }\n if (!type) ocorrencias.push(warn(messages.HtmlMensagens.inputWithoutType, relPath, line));\n if (type === 'password' && !getAttr(node, 'autocomplete')) {\n ocorrencias.push(warn(messages.HtmlMensagens.passwordWithoutAutocomplete, relPath, line));\n }\n}\nfunction validarScript(node: Element, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean) {\n const srcAttr = getAttr(node, 'src');\n const children = node.children || [];\n const text = children.filter((elem): elem is Text => elem.type === 'text').map(elem => String((elem as Text).data || '')).join('');\n if (!srcAttr && text.trim().length > 0) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineScript, relPath, line));\n if (text.length > 1000) ocorrencias.push(warn(messages.HtmlMensagens.largeInlineScript, relPath, line));\n }\n if (srcAttr && !isTemplate && !getAttr(node, 'defer') && !getAttr(node, 'async')) {\n ocorrencias.push(warn(messages.HtmlMensagens.scriptWithoutDefer, relPath, line));\n }\n}\nfunction validarStyle(node: Element, line: number, relPath: string, ocorrencias: Msg[]) {\n const children = node.children || [];\n const text = children.filter((elem): elem is Text => elem.type === 'text').map(elem => String((elem as Text).data || '')).join('');\n if (text.trim().length > 0) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineStyle, relPath, line));\n }\n}\n\nconst validadores: Record<string, (node: Element, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean) => void> = {\n button: validarButton,\n table: validarTable,\n iframe: validarIframe,\n a: validarLink,\n img: validarImg,\n form: validarForm,\n input: validarInput,\n script: validarScript,\n style: validarStyle,\n};\n\nfunction validateNode(node: Element, tag: string, line: number, relPath: string, ocorrencias: Msg[], isTemplate: boolean): void {\n const validador = validadores[tag];\n if (validador) validador(node, line, relPath, ocorrencias, isTemplate);\n const attrs = node?.attribs || {};\n if (Object.keys(attrs).some(attr => INLINE_EVENTS.has(attr.toLowerCase()))) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineHandler, relPath, line));\n }\n}\nfunction verificarDocumento(\n ocorrencias: Msg[],\n relPath: string,\n hasDoctype: boolean,\n htmlLangOk: boolean,\n hasCharset: boolean,\n hasViewport: boolean,\n hasTitle: boolean,\n h1Contagem: number,\n isTemplate: boolean\n): void {\n if (isTemplate) return;\n if (!hasDoctype) ocorrencias.push(warn(messages.HtmlMensagens.doctype, relPath, 1));\n if (!htmlLangOk) ocorrencias.push(warn(messages.HtmlMensagens.htmlLang, relPath, 1));\n if (!hasCharset) ocorrencias.push(warn(messages.HtmlMensagens.metaCharset, relPath, 1));\n if (!hasViewport) ocorrencias.push(warn(messages.HtmlMensagens.viewport, relPath, 1));\n if (!hasTitle) ocorrencias.push(warn(messages.HtmlMensagens.title, relPath, 1));\n if (h1Contagem > 1) ocorrencias.push(warn(messages.HtmlMensagens.multipleH1, relPath, 1));\n}\nfunction collectHtmlIssuesAst(src: string, relPath: string): Msg[] {\n const ocorrencias: Msg[] = [];\n const isTemplate = /\\.(template\\.html|\\.component\\.html)$/i.test(relPath);\n const lineOf = createLineLookup(src).lineAt;\n const doc = parseDocument(src, {\n xmlMode: false,\n withStartIndices: true,\n withEndIndices: true,\n recognizeSelfClosing: true\n });\n let hasDoctype = false;\n let hasTitle = false;\n let hasViewport = false;\n let hasCharset = false;\n let htmlLangOk = false;\n let lastHeadingNivel = 0;\n let h1Contagem = 0;\n const startLineOf = (node: AnyNode) => lineOf((node as { startIndex?: number | null }).startIndex ?? 0);\n walk(doc as AnyNode, node => {\n const doctype = checkDoctype(node);\n if (doctype !== null) { hasDoctype = doctype; return; }\n if (!isElement(node)) return;\n const tag = String(node.name || '').toLowerCase();\n const line = startLineOf(node);\n if (tag === 'title' && !isTemplate) hasTitle = true;\n if (tag === 'html' && !isTemplate && getAttr(node, 'lang')) htmlLangOk = true;\n if (tag === 'meta' && !isTemplate) {\n if (getAttr(node, 'charset') || (getAttr(node, 'http-equiv').toLowerCase() === 'content-type' && /charset\\s*=\\s*utf-8/i.test(getAttr(node, 'content')))) hasCharset = true;\n if (getAttr(node, 'name').toLowerCase() === 'viewport') hasViewport = true;\n }\n if (/^h[1-6]$/.test(tag) && !isTemplate) {\n const level = parseInt(tag.charAt(1), 10);\n if (level === 1) h1Contagem++;\n if (level > lastHeadingNivel + 1 && lastHeadingNivel > 0) {\n ocorrencias.push(warn(messages.HtmlMensagens.headingSkipped(level, lastHeadingNivel + 1), relPath, line));\n }\n lastHeadingNivel = level;\n }\n validateNode(node, tag, line, relPath, ocorrencias, isTemplate);\n });\n verificarDocumento(ocorrencias, relPath, hasDoctype, htmlLangOk, hasCharset, hasViewport, hasTitle, h1Contagem, isTemplate);\n return ocorrencias;\n}\nfunction checkDocTypeRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n if (!/<!DOCTYPE\\s+html>/i.test(scan) && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.doctype, relPath, 1));\n }\n}\nfunction checkHtmlLangRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n const htmlTag = scan.match(/<html[^>]*>/i);\n if (htmlTag && !isTemplate) {\n const hasLang = /\\slang=['\"][^'\" >]+['\"]/i.test(htmlTag[0]);\n if (!hasLang) {\n ocorrencias.push(warn(messages.HtmlMensagens.htmlLang, relPath, lineOfMasked(htmlTag.index ?? 0)));\n }\n }\n}\nfunction checkMetaCharsetRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n const hasCharsetAttr = /<meta\\s+[^>]*\\bcharset\\s*=\\s*['\"]?[^'\">\\s]+/i.test(scan);\n const hasCharsetInContentTipo = /<meta\\s+[^>]*http-equiv\\s*=\\s*['\"]content-type['\"][^>]*>/i.test(scan) && /charset\\s*=\\s*utf-8/i.test(scan);\n if (!hasCharsetAttr && !hasCharsetInContentTipo && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.metaCharset, relPath, 1));\n }\n}\nfunction checkViewportRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n if (!/<meta\\s+[^>]*name=[\"']viewport[\"']/i.test(scan) && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.viewport, relPath, 1));\n }\n}\nfunction checkTitleRegex(scan: string, relPath: string, isTemplate: boolean, ocorrencias: Msg[]): void {\n if (!/<title>[^<]*<\\/title>/i.test(scan) && !isTemplate) {\n ocorrencias.push(warn(messages.HtmlMensagens.title, relPath, 1));\n }\n}\nfunction checkLinkTargetBlankRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<a[^>]*target=['\"]?_blank['\"]?[^>]*>/gi)) {\n const hasRelSafe = /rel=['\"][^'\"]*(noopener|noreferrer)[^'\"]*['\"]/i.test(metrica[0]);\n if (!hasRelSafe) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkTargetBlank, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkImgAltRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<img[^>]*>/gi)) {\n const isSvg = /\\.svg/i.test(metrica[0]);\n const hasAlt = /\\salt=/.test(metrica[0]);\n const ariaHidden = /\\saria-hidden=['\"]true['\"]/i.test(metrica[0]);\n const ariaLabel = /\\saria-label=/i.test(metrica[0]);\n const rolePresentation = /\\srole=['\"](presentation|none)['\"]/i.test(metrica[0]);\n const dataAttr = /\\s(?:data-)?(?:decorative|icon|symbol)=/i.test(metrica[0]);\n if (!hasAlt && !ariaHidden && !ariaLabel && !rolePresentation && !dataAttr && !isSvg) {\n ocorrencias.push(warn(messages.HtmlMensagens.imgWithoutAlt, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkInlineHandlerRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/\\son(?:click|change|submit|load|error|mouseover|mouseout|keyup|keydown|focus|blur|input)=/gi)) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineHandler, relPath, lineOfMasked(metrica.index)));\n }\n}\nfunction checkFormRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<form[^>]*>/gi)) {\n const hasMethod = /\\smethod=/i.test(metrica[0]);\n const hasAction = /\\saction=/i.test(metrica[0]);\n if (!hasMethod) {\n ocorrencias.push(warn(messages.HtmlMensagens.formWithoutMethod, relPath, lineOfMasked(metrica.index)));\n }\n if (!hasAction && !/<form[^>]*data-/i.test(metrica[0])) {\n ocorrencias.push(warn(messages.HtmlMensagens.formWithoutAction, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkInputRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<input[^>]*>/gi)) {\n const hasAriaLabel = /\\saria-label=/i.test(metrica[0]);\n const hasNome = /\\sname=/i.test(metrica[0]);\n const isHidden = /\\stype=['\"]?hidden['\"]?/i.test(metrica[0]);\n const isButton = /\\stype=['\"]?(button|submit|reset)['\"]/i.test(metrica[0]);\n if (!isHidden && !isButton && !hasAriaLabel && !hasNome) {\n ocorrencias.push(warn(messages.HtmlMensagens.inputWithoutLabel, relPath, lineOfMasked(metrica.index)));\n }\n if (/\\stype=['\"]?password['\"]?\\s/.test(metrica[0]) && !/\\sautocomplete=/i.test(metrica[0])) {\n ocorrencias.push(warn(messages.HtmlMensagens.passwordWithoutAutocomplete, relPath, lineOfMasked(metrica.index)));\n }\n }\n}\nfunction checkLinkNoHrefRegex(scan: string, relPath: string, ocorrencias: Msg[], lineOfMasked: (idx: number) => number): void {\n for (const metrica of scan.matchAll(/<a[^>]*>/gi)) {\n const hasHref = /\\shref=/.test(metrica[0]);\n const href = /\\shref=['\"]([^'\"]*)['\"]/i.exec(metrica[0]);\n if (!hasHref || href?.[1] === '' || href?.[1] === '#') {\n const hasOnClick = /\\sonclick\\s*=/.test(metrica[0]);\n const hasRoleButton = /\\srole=['\"]button['\"]/i.test(metrica[0]);\n const hasTabIndex = /\\stabindex\\s*=/.test(metrica[0]);\n if (!hasOnClick && !hasRoleButton && !hasTabIndex) {\n ocorrencias.push(warn(messages.HtmlMensagens.linkNoHref, relPath, lineOfMasked(metrica.index)));\n }\n }\n }\n}\nfunction checkInlineScriptRegex(src: string, scanNoScriptStyle: string, relPath: string, ocorrencias: Msg[], lineOfScan: (idx: number) => number): void {\n for (const metrica of src.matchAll(/<script[^>]*>[\\s\\S]*?<\\/\\s*script\\b[^>]*\\s*>/gi)) {\n if (typeof metrica.index === 'number') {\n const idx = metrica.index;\n if ((scanNoScriptStyle[idx] ?? ' ') !== '<') continue;\n }\n const isExternal = /\\ssrc=/.test(metrica[0]);\n const innerScriptContent = metrica[0].replace(/^[\\s\\S]*?<script\\b[^>]*>/i, '').replace(/<\\/\\s*script\\b[^>]*\\s*>[\\s\\S]*$/i, '');\n const isEmpty = innerScriptContent.trim().length === 0;\n if (!isExternal && !isEmpty) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineScript, relPath, lineOfScan(metrica.index)));\n }\n }\n}\nfunction checkInlineStyleRegex(src: string, scanNoScriptStyle: string, relPath: string, ocorrencias: Msg[], lineOfScan: (idx: number) => number): void {\n for (const metrica of src.matchAll(/<style[^>]*>[\\s\\S]*?<\\/\\s*style\\b[^>]*\\s*>/gi)) {\n if (typeof metrica.index === 'number') {\n const idx = metrica.index;\n if ((scanNoScriptStyle[idx] ?? ' ') !== '<') continue;\n }\n const isEmpty = /<style\\b[^>]*>\\s*<\\/\\s*style[^>]*>/i.test(metrica[0]);\n if (!isEmpty) {\n ocorrencias.push(warn(messages.HtmlMensagens.inlineStyle, relPath, lineOfScan(metrica.index)));\n }\n }\n}\nfunction collectHtmlIssuesRegex(src: string, relPath: string): Msg[] {\n const ocorrencias: Msg[] = [];\n const isTemplate = /\\.(template\\.html|\\.component\\.html)$/i.test(relPath);\n const lineOfScan = createLineLookup(src).lineAt;\n const scan = maskHtmlComments(maskTagBlocks(maskTagBlocks(src, 'script'), 'style'));\n const lineOfMasked = createLineLookup(scan).lineAt;\n const scanNoScriptStyle = maskHtmlComments(src);\n checkDocTypeRegex(scan, relPath, isTemplate, ocorrencias);\n checkHtmlLangRegex(scan, relPath, isTemplate, ocorrencias, lineOfMasked);\n checkMetaCharsetRegex(scan, relPath, isTemplate, ocorrencias);\n checkViewportRegex(scan, relPath, isTemplate, ocorrencias);\n checkTitleRegex(scan, relPath, isTemplate, ocorrencias);\n checkLinkTargetBlankRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkImgAltRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkInlineHandlerRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkFormRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkInputRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkLinkNoHrefRegex(scan, relPath, ocorrencias, lineOfMasked);\n checkInlineScriptRegex(src, scanNoScriptStyle, relPath, ocorrencias, lineOfScan);\n checkInlineStyleRegex(src, scanNoScriptStyle, relPath, ocorrencias, lineOfScan);\n return ocorrencias;\n}\nfunction collectHtmlIssues(src: string, relPath: string): Msg[] {\n try {\n return collectHtmlIssuesAst(src, relPath);\n } catch {\n return collectHtmlIssuesRegex(src, relPath);\n }\n}\nexport const analistaHtml = criarAnalista({\n nome: 'analista-html',\n categoria: 'markup',\n descricao: 'Heurísticas leves para HTML com convenções padrão.',\n global: false,\n test: (relPath: string): boolean => /\\.(html|htm)$/i.test(relPath),\n aplicar: async (src, relPath): Promise<Msg[] | null> => {\n if (disableEnv) return null;\n const msgs = collectHtmlIssues(src, relPath);\n return msgs.length ? msgs : null;\n }\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyst-commands-cli.d.ts","sourceRoot":"","sources":["../../../../src/analysts/js-ts/analysts/analyst-commands-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAuL,IAAI,
|
|
1
|
+
{"version":3,"file":"analyst-commands-cli.d.ts","sourceRoot":"","sources":["../../../../src/analysts/js-ts/analysts/analyst-commands-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAuL,IAAI,EAAiB,MAAM,cAAc,CAAC;AAM7O,OAAO,KAAK,EAAmB,gBAAgB,EAAE,WAAW,EAA2B,uBAAuB,EAAE,MAAM,GAAG,CAAC;AAM1H,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,GAAG,WAAW,GAAG,IAAI,CAehF;AAwWD,eAAO,MAAM,mBAAmB;;oBAEd,MAAM,KAAG,OAAO;sBAKd,MAAM,WAAW,MAAM,OAAO,QAAQ,GAAG,IAAI,cAAc,MAAM,cAAc,gBAAgB,GAAG,uBAAuB;CAiD5I,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyst-commands-cli.js","sourceRoot":"","sources":["../../../../src/analysts/js-ts/analysts/analyst-commands-cli.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-inseguro-unknown\n// Justificativa: unknown é usado para manipulação segura de nós AST com tipagem defensiva\nimport type { NodePath } from '@babel/traverse';\nimport type { ArrowFunctionExpression, BlockStatement, CallExpression, ClassDeclaration, ClassMethod, FunctionDeclaration, FunctionExpression, ImportDeclaration, MemberExpression, NewExpression, Node, StringLiteral, VariableDeclaration, VariableDeclarator } from '@babel/types';\nimport * as textoTitulo from '@babel/types';\nimport { traverse } from '@core/config';\nimport { messages } from '@core/messages';\nimport { detectarContextoProjeto, isRelevanteParaAnalise } from '@shared';\n\nimport type { ComandoRegistro, ContextoExecucao, HandlerInfo, Ocorrencia, RegistrarFn, TecnicaAplicarResultado } from '@';\nimport { isBabelNode } from '@';\n\ntype BabelNode = Node;\ntype FunctionWithParams = textoTitulo.FunctionDeclaration | textoTitulo.FunctionExpression | textoTitulo.ArrowFunctionExpression;\n\nexport function extractHandlerInfo(nodeParam: Node | unknown): HandlerInfo | null {\n if (!nodeParam || !isBabelNode(nodeParam)) return null;\n const node = nodeParam as Node;\n const build = (fn: FunctionWithParams, bodyBlock: BlockStatement, isAnonymous: boolean): HandlerInfo => {\n const rawParams = Array.isArray(fn.params) ? fn.params : [];\n const params = rawParams.filter((p): p is textoTitulo.Identifier => textoTitulo.isIdentifier(p as textoTitulo.Node));\n return { func: fn, bodyBlock, isAnonymous, params, totalParams: (fn.params ?? []).length };\n };\n if (textoTitulo.isFunctionDeclaration(node) && node.body && textoTitulo.isBlockStatement(node.body)) {\n return build(node, node.body as BlockStatement, !node.id);\n }\n if ((textoTitulo.isFunctionExpression(node) || textoTitulo.isArrowFunctionExpression(node)) && node.body && textoTitulo.isBlockStatement(node.body)) {\n return build(node, node.body as BlockStatement, textoTitulo.isFunctionExpression(node) ? !node.id : true);\n }\n return null;\n}\n\n// ── State ──────────────────────────────────────────────────────────────\n\ninterface AnaliseState {\n comandos: ComandoRegistro[];\n comandoNomes: string[];\n comandosInvocados: number;\n hasFrameworkSignal: boolean;\n commandClassNomes: Set<string>;\n}\n\n// ── Line extraction helpers ────────────────────────────────────────────\n\nfunction getNumberProp(obj: unknown, prop: string): number | undefined {\n if (typeof obj !== 'object' || obj === null) return undefined;\n const dict = obj as Record<string, unknown>;\n const val = dict[prop];\n return typeof val === 'number' ? val : undefined;\n}\n\nfunction extractLineFromNode(obj: unknown): number | undefined {\n if (typeof obj !== 'object' || obj === null) return undefined;\n const dict = obj as Record<string, unknown>;\n const loc = dict.loc;\n if (typeof loc !== 'object' || loc === null) return undefined;\n const start = (loc as Record<string, unknown>).start;\n if (typeof start !== 'object' || start === null) return undefined;\n const line = (start as Record<string, unknown>).line;\n return typeof line === 'number' ? line : undefined;\n}\n\n// ── Framework detection ────────────────────────────────────────────────\n\nfunction detectarNewCommand(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isNewExpression(node)) return;\n const newExpr = node as NewExpression;\n if (!textoTitulo.isIdentifier(newExpr.callee) || newExpr.callee.name !== 'Command') return;\n state.hasFrameworkSignal = true;\n let nome = '';\n const arg0 = newExpr.arguments && newExpr.arguments[0];\n if (arg0 && textoTitulo.isStringLiteral(arg0)) nome = (arg0 as StringLiteral).value;\n if (state.comandosInvocados === 0) {\n state.comandosInvocados++;\n if (nome) state.comandoNomes.push(nome);\n }\n}\n\nfunction detectarDiscordJs(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isCallExpression(node) && !textoTitulo.isMemberExpression(node)) return;\n if (textoTitulo.isCallExpression(node)) {\n const call = node as CallExpression;\n if (!textoTitulo.isMemberExpression(call.callee)) return;\n const prop = (call.callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop)) return;\n const chamaMetodos = ['addSlashCommand', 'setName', 'setDescription', 'addStringOption', 'addUserOption', 'addChannelOption'];\n if (!chamaMetodos.includes(prop.name)) return;\n state.hasFrameworkSignal = true;\n if (state.comandosInvocados === 0) {\n state.comandosInvocados++;\n const arg0 = call.arguments && call.arguments[0];\n const nome = prop.name === 'setName' && arg0 && textoTitulo.isStringLiteral(arg0) ? (arg0 as StringLiteral).value : 'slash-command';\n state.comandoNomes.push(nome);\n }\n return;\n }\n if (textoTitulo.isMemberExpression(node)) {\n const member = node as MemberExpression;\n const prop = member.property;\n if (!textoTitulo.isIdentifier(prop)) return;\n const membros = ['commandName', 'options', 'isCommand', 'reply', 'editReply', 'deferReply', 'isChatInputCommand', 'isAutocomplete'];\n if (!membros.includes(prop.name)) return;\n state.hasFrameworkSignal = true;\n if (state.comandosInvocados === 0) state.comandosInvocados++;\n }\n}\n\nconst METODOS_CADEIA_COMMANDER = new Set(['option', 'description', 'alias', 'argument', 'usage', 'help']);\n\nfunction detectarCommanderChainMethods(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const callee = (node as CallExpression).callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop)) return;\n if (METODOS_CADEIA_COMMANDER.has(prop.name)) {\n state.hasFrameworkSignal = true;\n }\n}\n\nfunction detectarGenericCommand(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isIdentifier(callee)) return;\n if (!['onCommand', 'registerCommand'].includes(callee.name)) return;\n let comandoNome = '';\n const primeiroArg = call.arguments && call.arguments[0];\n if (primeiroArg && textoTitulo.isStringLiteral(primeiroArg)) comandoNome = (primeiroArg as StringLiteral).value;\n const handler = call.arguments && call.arguments.length > 1 ? call.arguments[1] : undefined;\n registrar(call, comandoNome, handler as Node | undefined, 'generico');\n}\n\nfunction detectarCommanderAction(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop) || prop.name !== 'action') return;\n const handler = call.arguments && call.arguments[0] as Node | undefined;\n const nome = extrairNomeDeCadeia(call);\n registrar(call, nome, handler, 'commander');\n}\n\nfunction detectarCommanderCommand(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop) || prop.name !== 'command') return;\n const args = call.arguments || [];\n const nameArg = args[0];\n let nome = '';\n if (nameArg && textoTitulo.isStringLiteral(nameArg)) nome = (nameArg as StringLiteral).value;\n let handler: Node | undefined;\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i] as Node;\n if (textoTitulo.isFunctionExpression(arg) || textoTitulo.isArrowFunctionExpression(arg)) {\n handler = arg as Node;\n break;\n }\n }\n registrar(call, nome, handler, 'multi');\n}\n\nfunction detectarYargs(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const obj = (callee as MemberExpression).object;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop) || prop.name !== 'command') return;\n if (!textoTitulo.isIdentifier(obj) || !/yargs?/i.test(obj.name)) return;\n const args = call.arguments || [];\n let nome = '';\n if (args[0] && textoTitulo.isStringLiteral(args[0])) nome = (args[0] as StringLiteral).value;\n const handlerCandidates = args.filter((arg: unknown) => textoTitulo.isFunctionExpression(arg as Node) || textoTitulo.isArrowFunctionExpression(arg as Node));\n const handler = handlerCandidates.at(-1) as Node | undefined;\n registrar(call, nome, handler, 'yargs');\n}\n\nfunction detectarOclif(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isClassDeclaration(node)) return;\n const cls = node as ClassDeclaration;\n if (!cls.superClass || !textoTitulo.isIdentifier(cls.superClass) || cls.superClass.name !== 'Command') return;\n const classNome = cls.id?.name || '';\n const bodyArray = (cls.body as { body?: unknown }).body;\n const isRunMethod = (method: unknown): method is ClassMethod => {\n if (!textoTitulo.isClassMethod(method as Node)) return false;\n const k = (method as ClassMethod).key;\n return textoTitulo.isIdentifier(k) && k.name === 'run';\n };\n const bodyElem = Array.isArray(bodyArray) ? bodyArray?.find(isRunMethod) as ClassMethod | undefined : undefined;\n if (bodyElem && bodyElem.body && textoTitulo.isBlockStatement(bodyElem.body)) {\n registrar(textoTitulo.callExpression(textoTitulo.identifier('oclifRun'), []), classNome, bodyElem as Node, 'oclif');\n }\n}\n\nfunction detectarImportCommander(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isImportDeclaration(node)) return;\n const imp = node as ImportDeclaration;\n if (typeof imp.source.value !== 'string' || !/commander/.test(imp.source.value)) return;\n for (const spec of imp.specifiers) {\n if (textoTitulo.isImportSpecifier(spec) && textoTitulo.isIdentifier(spec.imported) && spec.imported.name === 'Command') {\n if (textoTitulo.isIdentifier(spec.local)) state.commandClassNomes.add(spec.local.name);\n }\n }\n}\n\nfunction detectarVarUsage(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isFunctionDeclaration(node) && !textoTitulo.isFunctionExpression(node) && !textoTitulo.isArrowFunctionExpression(node)) return;\n const fnBody = (node as FunctionDeclaration | FunctionExpression | ArrowFunctionExpression).body;\n if (!fnBody || !textoTitulo.isBlockStatement(fnBody)) return;\n const createdVars = new Set<string>();\n for (const stmt of fnBody.body || []) {\n if (textoTitulo.isVariableDeclaration(stmt)) {\n for (const decl of stmt.declarations) {\n if (decl.id && textoTitulo.isIdentifier(decl.id) && decl.init && textoTitulo.isNewExpression(decl.init) && textoTitulo.isIdentifier(decl.init.callee) && state.commandClassNomes.has(decl.init.callee.name)) {\n createdVars.add(decl.id.name);\n }\n }\n } else if (textoTitulo.isExpressionStatement(stmt) && textoTitulo.isCallExpression(stmt.expression) && textoTitulo.isMemberExpression(stmt.expression.callee)) {\n const obj = stmt.expression.callee.object;\n if (textoTitulo.isIdentifier(obj) && createdVars.has(obj.name)) {\n state.hasFrameworkSignal = true;\n }\n } else if (textoTitulo.isReturnStatement(stmt) && stmt.argument) {\n if (textoTitulo.isIdentifier(stmt.argument) && createdVars.has(stmt.argument.name)) {\n state.hasFrameworkSignal = true;\n if (state.comandosInvocados === 0) state.comandosInvocados++;\n }\n }\n }\n}\n\n// ── Registrar factory ──────────────────────────────────────────────────\n\nfunction criarRegistrar(state: AnaliseState): RegistrarFn {\n return (node: unknown, comandoNome: string, handler: unknown, origemFramework: string) => {\n state.comandosInvocados++;\n if (comandoNome) state.comandoNomes.push(comandoNome);\n const userInfo = extractHandlerInfo(handler as Node | undefined);\n const registro: ComandoRegistro = {\n comandoNome,\n id: undefined,\n timestamp: new Date().toISOString(),\n origemFramework\n };\n registro.handler = userInfo ? {\n ...userInfo\n } as HandlerInfo : undefined;\n registro.node = node as Node | undefined;\n state.comandos.push(registro);\n };\n}\n\n// ── Name extraction ────────────────────────────────────────────────────\n\nfunction extrairNomeDeCadeia(call: textoTitulo.CallExpression): string {\n let current: textoTitulo.Node | null = call as textoTitulo.Node;\n const visitados = new Set<textoTitulo.Node>();\n while (current && !visitados.has(current)) {\n visitados.add(current);\n if (textoTitulo.isCallExpression(current) && textoTitulo.isMemberExpression(current.callee)) {\n const callee = current.callee;\n const prop = callee.property;\n if (textoTitulo.isIdentifier(prop) && prop.name === 'command') {\n const arg0 = current.arguments && current.arguments[0];\n if (arg0 && textoTitulo.isStringLiteral(arg0)) return arg0.value;\n }\n const owner = callee.object;\n if (textoTitulo.isCallExpression(owner)) {\n current = owner as textoTitulo.Node;\n continue;\n } else if (textoTitulo.isMemberExpression(owner)) {\n current = owner.object as textoTitulo.Node;\n continue;\n } else {\n break;\n }\n } else if (textoTitulo.isMemberExpression(current)) {\n current = current.object as textoTitulo.Node;\n continue;\n }\n break;\n }\n return '';\n}\n\n// ── Post-traversal processing ──────────────────────────────────────────\n\nfunction verificarComandosDuplicados(comandoNomes: string[], relPath: string): Ocorrencia | null {\n const duplicados = comandoNomes.filter((item, idx) => item && comandoNomes.indexOf(item) !== idx);\n if (duplicados.length === 0) return null;\n return {\n tipo: 'padrao-problematico',\n nivel: 'aviso',\n mensagem: messages.ComandosCliMensagens.comandosDuplicados(duplicados),\n relPath,\n origem: 'analista-comandos-cli'\n };\n}\n\nfunction extrairLinha(handlerInfo: HandlerInfo | undefined, node: Node | undefined): number {\n const fromHandler = extractLineFromNode(handlerInfo);\n if (typeof fromHandler === 'number') return fromHandler;\n const fromNode = extractLineFromNode(node);\n return typeof fromNode === 'number' ? fromNode : 1;\n}\n\nfunction verificarHandlerAnonimo(handlerInfo: HandlerInfo, comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n if (!handlerInfo.isAnonymous || !comandoNome) return null;\n return { tipo: 'padrao-problematico', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerAnonimo(comandoNome), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarMuitosParams(handlerInfo: HandlerInfo, comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n const contagem = handlerInfo.totalParams ?? (Array.isArray(handlerInfo.params) ? handlerInfo.params.length : 0);\n if (contagem <= 3 || !comandoNome) return null;\n return { tipo: 'padrao-problematico', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerMuitosParametros(comandoNome, contagem), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarHandlerLongo(statements: unknown[], comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n if (statements.length <= 30 || !comandoNome) return null;\n return { tipo: 'padrao-problematico', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerMuitoLongo(comandoNome, statements.length), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarTryCatch(statements: unknown[], comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n if (statements.length === 0 || !comandoNome) return null;\n if (statements.some((stmt: unknown) => textoTitulo.isTryStatement(stmt as textoTitulo.Node))) return null;\n return { tipo: 'boa-pratica-ausente', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerSemTryCatch(comandoNome), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarFeedback(handlerInfo: HandlerInfo, statements: unknown[], comandoNome: string | undefined, linha: number, relPath: string, conteudo: string): Ocorrencia | null {\n if (statements.length === 0 || !comandoNome) return null;\n const bodyInicio = getNumberProp(handlerInfo.bodyBlock, 'start');\n const bodyFim = getNumberProp(handlerInfo.bodyBlock, 'end');\n const bodySlice = typeof bodyInicio === 'number' && typeof bodyFim === 'number' ? conteudo.substring(bodyInicio, bodyFim) : '';\n const bodySrc = (bodySlice && bodySlice.length > 5 ? bodySlice : conteudo);\n const regexLog = /console\\.(log|warn|error)|logger\\.|ctx\\.(reply|send|res|response)/;\n if (regexLog.test(bodySrc) || regexLog.test(conteudo)) return null;\n return { tipo: 'boa-pratica-ausente', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerSemFeedback(comandoNome), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction processarComandosRegistrados(\n comandos: ComandoRegistro[],\n comandoNomes: string[],\n comandosInvocados: number,\n hasFrameworkSignal: boolean,\n relPath: string,\n conteudo: string,\n contextoProjeto: ReturnType<typeof detectarContextoProjeto>,\n): Ocorrencia[] {\n const ocorrencias: Ocorrencia[] = [];\n\n if (comandosInvocados === 0 && !hasFrameworkSignal && (contextoProjeto.isBot || contextoProjeto.isCLI) && !contextoProjeto.isInfrastructure) {\n ocorrencias.push({ tipo: 'padrao-ausente', nivel: 'info', mensagem: messages.ComandosCliMensagens.padraoAusente, relPath, origem: 'analista-comandos-cli' });\n }\n\n const duplicata = verificarComandosDuplicados(comandoNomes, relPath);\n if (duplicata) ocorrencias.push(duplicata);\n\n for (const cmd of comandos) {\n const handlerInfo = cmd.handler;\n if (!handlerInfo || !handlerInfo.bodyBlock) continue;\n const linha = extrairLinha(handlerInfo, cmd.node);\n const statements = Array.isArray(handlerInfo.bodyBlock.body) ? handlerInfo.bodyBlock.body : [];\n\n for (const ocorrencia of [\n verificarHandlerAnonimo(handlerInfo, cmd.comandoNome, linha, relPath),\n verificarMuitosParams(handlerInfo, cmd.comandoNome, linha, relPath),\n verificarHandlerLongo(statements, cmd.comandoNome, linha, relPath),\n verificarTryCatch(statements, cmd.comandoNome, linha, relPath),\n verificarFeedback(handlerInfo, statements, cmd.comandoNome, linha, relPath, conteudo),\n ]) {\n if (ocorrencia) ocorrencias.push(ocorrencia);\n }\n }\n\n if (comandos.length > 1) {\n ocorrencias.push({ tipo: 'padrao-estrutural', nivel: 'info', mensagem: messages.ComandosCliMensagens.multiplosComandos(comandos.length), relPath, origem: 'analista-comandos-cli' });\n }\n\n return ocorrencias;\n}\n\n// ── Analyst export ─────────────────────────────────────────────────────\n\nexport const analistaComandosCli = {\n nome: 'analista-comandos-cli',\n test: (relPath: string): boolean => {\n const caminho = relPath.replace(/\\\\/g, '/').toLowerCase();\n if (/(^|\\/)tests?(\\/)/i.test(caminho) || /\\.(test|spec)\\.(ts|js|tsx|jsx)$/i.test(caminho)) return false;\n return /(\\.ts|\\.tsx|\\.js|\\.jsx)$/.test(caminho);\n },\n aplicar(conteudo: string, arquivo: string, ast: NodePath | null, _fullPath?: string, _contexto?: ContextoExecucao): TecnicaAplicarResultado {\n const contextoProjeto = detectarContextoProjeto({\n arquivo,\n conteudo,\n relPath: arquivo\n });\n if (!isRelevanteParaAnalise(contextoProjeto, 'comando')) return [];\n if (!ast) return [];\n\n const state: AnaliseState = {\n comandos: [],\n comandoNomes: [],\n comandosInvocados: 0,\n hasFrameworkSignal: false,\n commandClassNomes: new Set<string>(['Command']),\n };\n\n const registrar = criarRegistrar(state);\n type Detector = (node: textoTitulo.Node) => void;\n const detectores: Detector[] = [\n (n) => detectarNewCommand(n, state),\n (n) => detectarDiscordJs(n, state),\n (n) => detectarCommanderChainMethods(n, state),\n (n) => detectarGenericCommand(n, state, registrar),\n (n) => detectarCommanderAction(n, state, registrar),\n (n) => detectarCommanderCommand(n, state, registrar),\n (n) => detectarYargs(n, state, registrar),\n (n) => detectarOclif(n, state, registrar),\n (n) => detectarImportCommander(n, state),\n (n) => detectarVarUsage(n, state),\n ];\n\n traverse(ast.node, {\n enter(path: NodePath<textoTitulo.Node>) {\n const nodeAtual = path.node as BabelNode;\n for (const detector of detectores) detector(nodeAtual);\n }\n });\n\n return processarComandosRegistrados(\n state.comandos,\n state.comandoNomes,\n state.comandosInvocados,\n state.hasFrameworkSignal,\n arquivo,\n conteudo,\n contextoProjeto,\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"analyst-commands-cli.js","sourceRoot":"","sources":["../../../../src/analysts/js-ts/analysts/analyst-commands-cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAKhC,MAAM,UAAU,kBAAkB,CAAC,SAAyB;IAC1D,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,SAAiB,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,EAAsB,EAAE,SAAyB,EAAE,WAAoB,EAAe,EAAE;QACrG,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAA+B,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAqB,CAAC,CAAC,CAAC;QACrH,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7F,CAAC,CAAC;IACF,IAAI,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpG,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAsB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpJ,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAsB,EAAE,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAcD,SAAS,aAAa,CAAC,GAAY,EAAE,IAAY;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,IAAI,GAAG,GAA8B,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,IAAI,GAAG,GAA8B,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAI,GAA+B,CAAC,KAAK,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;IACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAID,SAAS,kBAAkB,CAAC,IAAsB,EAAE,KAAmB;IACrE,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO;IAC/C,MAAM,OAAO,GAAG,IAAqB,CAAC;IACtC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO;IAC3F,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAChC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,IAAI,IAAI,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,IAAI,GAAI,IAAsB,CAAC,KAAK,CAAC;IACpF,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,IAAI;YAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAsB,EAAE,KAAmB;IACpE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO;IACzF,IAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAsB,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO;QACzD,MAAM,IAAI,GAAI,IAAI,CAAC,MAA2B,CAAC,QAAQ,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAC5C,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAC9H,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9C,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAChC,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,IAAI,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;YACpI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAwB,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAC5C,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;QACpI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QACzC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAChC,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC;YAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1G,SAAS,6BAA6B,CAAC,IAAsB,EAAE,KAAmB;IAChF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO;IAChD,MAAM,MAAM,GAAI,IAAuB,CAAC,MAAM,CAAC;IAC/C,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO;IACpD,MAAM,IAAI,GAAI,MAA2B,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5C,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAClC,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAsB,EAAE,KAAmB,EAAE,SAAsB;IACjG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO;IAChD,MAAM,IAAI,GAAG,IAAsB,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO;IAC9C,IAAI,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO;IACpE,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,WAAW,IAAI,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC;QAAE,WAAW,GAAI,WAA6B,CAAC,KAAK,CAAC;IAChH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,OAA2B,EAAE,UAAU,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAsB,EAAE,KAAmB,EAAE,SAAsB;IAClG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO;IAChD,MAAM,IAAI,GAAG,IAAsB,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO;IACpD,MAAM,IAAI,GAAI,MAA2B,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAqB,CAAC;IACxE,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAsB,EAAE,KAAmB,EAAE,SAAsB;IACnG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO;IAChD,MAAM,IAAI,GAAG,IAAsB,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO;IACpD,MAAM,IAAI,GAAI,MAA2B,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO;IACvE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,IAAI,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC;QAAE,IAAI,GAAI,OAAyB,CAAC,KAAK,CAAC;IAC7F,IAAI,OAAyB,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAS,CAAC;QAC5B,IAAI,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;YACxF,OAAO,GAAG,GAAW,CAAC;YACtB,MAAM;QACR,CAAC;IACH,CAAC;IACD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,IAAsB,EAAE,KAAmB,EAAE,SAAsB;IACxF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO;IAChD,MAAM,IAAI,GAAG,IAAsB,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO;IACpD,MAAM,GAAG,GAAI,MAA2B,CAAC,MAAM,CAAC;IAChD,MAAM,IAAI,GAAI,MAA2B,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO;IACvE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACxE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAClC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAE,IAAI,GAAI,IAAI,CAAC,CAAC,CAAmB,CAAC,KAAK,CAAC;IAC7F,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAW,CAAC,IAAI,WAAW,CAAC,yBAAyB,CAAC,GAAW,CAAC,CAAC,CAAC;IAC7J,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAqB,CAAC;IAC7D,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,IAAsB,EAAE,KAAmB,EAAE,SAAsB;IACxF,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO;IAClD,MAAM,GAAG,GAAG,IAAwB,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO;IAC9G,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;IACrC,MAAM,SAAS,GAAI,GAAG,CAAC,IAA2B,CAAC,IAAI,CAAC;IACxD,MAAM,WAAW,GAAG,CAAC,MAAe,EAAyB,EAAE;QAC7D,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,MAAM,CAAC,GAAI,MAAsB,CAAC,GAAG,CAAC;QACtC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IACzD,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAA4B,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,QAAgB,EAAE,OAAO,CAAC,CAAC;IACtH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAsB,EAAE,KAAmB;IAC1E,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO;IACnD,MAAM,GAAG,GAAG,IAAyB,CAAC;IACtC,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO;IACxF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACvH,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAsB,EAAE,KAAmB;IACnE,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAAE,OAAO;IAChJ,MAAM,MAAM,GAAI,IAA2E,CAAC,IAAI,CAAC;IACjG,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO;IAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACrC,IAAI,IAAI,CAAC,EAAE,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5M,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9J,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1C,IAAI,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChE,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnF,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAChC,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC;oBAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAID,SAAS,cAAc,CAAC,KAAmB;IACzC,OAAO,CAAC,IAAa,EAAE,WAAmB,EAAE,OAAgB,EAAE,eAAuB,EAAE,EAAE;QACvF,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,WAAW;YAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAA2B,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAoB;YAChC,WAAW;YACX,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,eAAe;SAChB,CAAC;QACF,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;YAC5B,GAAG,QAAQ;SACG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7B,QAAQ,CAAC,IAAI,GAAG,IAAwB,CAAC;QACzC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC;AAID,SAAS,mBAAmB,CAAC,IAAgC;IAC3D,IAAI,OAAO,GAA4B,IAAwB,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC7B,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,IAAI,IAAI,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC,KAAK,CAAC;YACnE,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,IAAI,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO,GAAG,KAAyB,CAAC;gBACpC,SAAS;YACX,CAAC;iBAAM,IAAI,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,OAAO,GAAG,KAAK,CAAC,MAA0B,CAAC;gBAC3C,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,OAAO,GAAG,OAAO,CAAC,MAA0B,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAID,SAAS,2BAA2B,CAAC,YAAsB,EAAE,OAAe;IAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAClG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,UAAU,CAAC;QACtE,OAAO;QACP,MAAM,EAAE,uBAAuB;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,WAAoC,EAAE,IAAsB;IAChF,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IACxD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAwB,EAAE,WAA+B,EAAE,KAAa,EAAE,OAAe;IACxH,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AAC/K,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAwB,EAAE,WAA+B,EAAE,KAAa,EAAE,OAAe;IACtH,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AAClM,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAqB,EAAE,WAA+B,EAAE,KAAa,EAAE,OAAe;IACnH,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AACrM,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAqB,EAAE,WAA+B,EAAE,KAAa,EAAE,OAAe;IAC/G,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,IAAwB,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1G,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AACnL,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAwB,EAAE,UAAqB,EAAE,WAA+B,EAAE,KAAa,EAAE,OAAe,EAAE,QAAgB;IAC3J,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/H,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,mEAAmE,CAAC;IACrF,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AACnL,CAAC;AAED,SAAS,4BAA4B,CACnC,QAA2B,EAC3B,YAAsB,EACtB,iBAAyB,EACzB,kBAA2B,EAC3B,OAAe,EACf,QAAgB,EAChB,eAA2D;IAE3D,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,IAAI,iBAAiB,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAC5I,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC/J,CAAC;IAED,MAAM,SAAS,GAAG,2BAA2B,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,SAAS;QAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS;YAAE,SAAS;QACrD,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/F,KAAK,MAAM,UAAU,IAAI;YACvB,uBAAuB,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;YACrE,qBAAqB,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;YACnE,qBAAqB,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;YAClE,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;YAC9D,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;SACtF,EAAE,CAAC;YACF,IAAI,UAAU;gBAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACvL,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAID,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,uBAAuB;IAC7B,IAAI,EAAE,CAAC,OAAe,EAAW,EAAE;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACxG,OAAO,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,QAAgB,EAAE,OAAe,EAAE,GAAoB,EAAE,SAAkB,EAAE,SAA4B;QAC/G,MAAM,eAAe,GAAG,uBAAuB,CAAC;YAC9C,OAAO;YACP,QAAQ;YACR,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAEpB,MAAM,KAAK,GAAiB;YAC1B,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,EAAE;YAChB,iBAAiB,EAAE,CAAC;YACpB,kBAAkB,EAAE,KAAK;YACzB,iBAAiB,EAAE,IAAI,GAAG,CAAS,CAAC,SAAS,CAAC,CAAC;SAChD,CAAC;QAEF,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,UAAU,GAAe;YAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC;YACnC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC;YAClC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,EAAE,KAAK,CAAC;YAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;YAClD,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;YACnD,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;YACpD,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;YACzC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;YACzC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,KAAK,CAAC;YACxC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;SAClC,CAAC;QAEF,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,KAAK,CAAC,IAAgC;gBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAiB,CAAC;gBACzC,KAAK,MAAM,QAAQ,IAAI,UAAU;oBAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzD,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,4BAA4B,CACjC,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,kBAAkB,EACxB,OAAO,EACP,QAAQ,EACR,eAAe,CAChB,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["// SPDX-License-Identifier: MIT\n// @tutanus-disable tipo-inseguro-unknown\n// Justificativa: unknown é usado para manipulação segura de nós AST com tipagem defensiva\nimport type { NodePath } from '@babel/traverse';\nimport type { ArrowFunctionExpression, BlockStatement, CallExpression, ClassDeclaration, ClassMethod, FunctionDeclaration, FunctionExpression, ImportDeclaration, MemberExpression, NewExpression, Node, StringLiteral } from '@babel/types';\nimport * as textoTitulo from '@babel/types';\nimport { traverse } from '@core/config';\nimport { messages } from '@core/messages';\nimport { detectarContextoProjeto, isRelevanteParaAnalise } from '@shared';\n\nimport type { ComandoRegistro, ContextoExecucao, HandlerInfo, Ocorrencia, RegistrarFn, TecnicaAplicarResultado } from '@';\nimport { isBabelNode } from '@';\n\ntype BabelNode = Node;\ntype FunctionWithParams = textoTitulo.FunctionDeclaration | textoTitulo.FunctionExpression | textoTitulo.ArrowFunctionExpression;\n\nexport function extractHandlerInfo(nodeParam: Node | unknown): HandlerInfo | null {\n if (!nodeParam || !isBabelNode(nodeParam)) return null;\n const node = nodeParam as Node;\n const build = (fn: FunctionWithParams, bodyBlock: BlockStatement, isAnonymous: boolean): HandlerInfo => {\n const rawParams = Array.isArray(fn.params) ? fn.params : [];\n const params = rawParams.filter((p): p is textoTitulo.Identifier => textoTitulo.isIdentifier(p as textoTitulo.Node));\n return { func: fn, bodyBlock, isAnonymous, params, totalParams: (fn.params ?? []).length };\n };\n if (textoTitulo.isFunctionDeclaration(node) && node.body && textoTitulo.isBlockStatement(node.body)) {\n return build(node, node.body as BlockStatement, !node.id);\n }\n if ((textoTitulo.isFunctionExpression(node) || textoTitulo.isArrowFunctionExpression(node)) && node.body && textoTitulo.isBlockStatement(node.body)) {\n return build(node, node.body as BlockStatement, textoTitulo.isFunctionExpression(node) ? !node.id : true);\n }\n return null;\n}\n\n// ── State ──────────────────────────────────────────────────────────────\n\ninterface AnaliseState {\n comandos: ComandoRegistro[];\n comandoNomes: string[];\n comandosInvocados: number;\n hasFrameworkSignal: boolean;\n commandClassNomes: Set<string>;\n}\n\n// ── Line extraction helpers ────────────────────────────────────────────\n\nfunction getNumberProp(obj: unknown, prop: string): number | undefined {\n if (typeof obj !== 'object' || obj === null) return undefined;\n const dict = obj as Record<string, unknown>;\n const val = dict[prop];\n return typeof val === 'number' ? val : undefined;\n}\n\nfunction extractLineFromNode(obj: unknown): number | undefined {\n if (typeof obj !== 'object' || obj === null) return undefined;\n const dict = obj as Record<string, unknown>;\n const loc = dict.loc;\n if (typeof loc !== 'object' || loc === null) return undefined;\n const start = (loc as Record<string, unknown>).start;\n if (typeof start !== 'object' || start === null) return undefined;\n const line = (start as Record<string, unknown>).line;\n return typeof line === 'number' ? line : undefined;\n}\n\n// ── Framework detection ────────────────────────────────────────────────\n\nfunction detectarNewCommand(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isNewExpression(node)) return;\n const newExpr = node as NewExpression;\n if (!textoTitulo.isIdentifier(newExpr.callee) || newExpr.callee.name !== 'Command') return;\n state.hasFrameworkSignal = true;\n let nome = '';\n const arg0 = newExpr.arguments && newExpr.arguments[0];\n if (arg0 && textoTitulo.isStringLiteral(arg0)) nome = (arg0 as StringLiteral).value;\n if (state.comandosInvocados === 0) {\n state.comandosInvocados++;\n if (nome) state.comandoNomes.push(nome);\n }\n}\n\nfunction detectarDiscordJs(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isCallExpression(node) && !textoTitulo.isMemberExpression(node)) return;\n if (textoTitulo.isCallExpression(node)) {\n const call = node as CallExpression;\n if (!textoTitulo.isMemberExpression(call.callee)) return;\n const prop = (call.callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop)) return;\n const chamaMetodos = ['addSlashCommand', 'setName', 'setDescription', 'addStringOption', 'addUserOption', 'addChannelOption'];\n if (!chamaMetodos.includes(prop.name)) return;\n state.hasFrameworkSignal = true;\n if (state.comandosInvocados === 0) {\n state.comandosInvocados++;\n const arg0 = call.arguments && call.arguments[0];\n const nome = prop.name === 'setName' && arg0 && textoTitulo.isStringLiteral(arg0) ? (arg0 as StringLiteral).value : 'slash-command';\n state.comandoNomes.push(nome);\n }\n return;\n }\n if (textoTitulo.isMemberExpression(node)) {\n const member = node as MemberExpression;\n const prop = member.property;\n if (!textoTitulo.isIdentifier(prop)) return;\n const membros = ['commandName', 'options', 'isCommand', 'reply', 'editReply', 'deferReply', 'isChatInputCommand', 'isAutocomplete'];\n if (!membros.includes(prop.name)) return;\n state.hasFrameworkSignal = true;\n if (state.comandosInvocados === 0) state.comandosInvocados++;\n }\n}\n\nconst METODOS_CADEIA_COMMANDER = new Set(['option', 'description', 'alias', 'argument', 'usage', 'help']);\n\nfunction detectarCommanderChainMethods(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const callee = (node as CallExpression).callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop)) return;\n if (METODOS_CADEIA_COMMANDER.has(prop.name)) {\n state.hasFrameworkSignal = true;\n }\n}\n\nfunction detectarGenericCommand(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isIdentifier(callee)) return;\n if (!['onCommand', 'registerCommand'].includes(callee.name)) return;\n let comandoNome = '';\n const primeiroArg = call.arguments && call.arguments[0];\n if (primeiroArg && textoTitulo.isStringLiteral(primeiroArg)) comandoNome = (primeiroArg as StringLiteral).value;\n const handler = call.arguments && call.arguments.length > 1 ? call.arguments[1] : undefined;\n registrar(call, comandoNome, handler as Node | undefined, 'generico');\n}\n\nfunction detectarCommanderAction(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop) || prop.name !== 'action') return;\n const handler = call.arguments && call.arguments[0] as Node | undefined;\n const nome = extrairNomeDeCadeia(call);\n registrar(call, nome, handler, 'commander');\n}\n\nfunction detectarCommanderCommand(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop) || prop.name !== 'command') return;\n const args = call.arguments || [];\n const nameArg = args[0];\n let nome = '';\n if (nameArg && textoTitulo.isStringLiteral(nameArg)) nome = (nameArg as StringLiteral).value;\n let handler: Node | undefined;\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i] as Node;\n if (textoTitulo.isFunctionExpression(arg) || textoTitulo.isArrowFunctionExpression(arg)) {\n handler = arg as Node;\n break;\n }\n }\n registrar(call, nome, handler, 'multi');\n}\n\nfunction detectarYargs(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isCallExpression(node)) return;\n const call = node as CallExpression;\n const callee = call.callee;\n if (!textoTitulo.isMemberExpression(callee)) return;\n const obj = (callee as MemberExpression).object;\n const prop = (callee as MemberExpression).property;\n if (!textoTitulo.isIdentifier(prop) || prop.name !== 'command') return;\n if (!textoTitulo.isIdentifier(obj) || !/yargs?/i.test(obj.name)) return;\n const args = call.arguments || [];\n let nome = '';\n if (args[0] && textoTitulo.isStringLiteral(args[0])) nome = (args[0] as StringLiteral).value;\n const handlerCandidates = args.filter((arg: unknown) => textoTitulo.isFunctionExpression(arg as Node) || textoTitulo.isArrowFunctionExpression(arg as Node));\n const handler = handlerCandidates.at(-1) as Node | undefined;\n registrar(call, nome, handler, 'yargs');\n}\n\nfunction detectarOclif(node: textoTitulo.Node, state: AnaliseState, registrar: RegistrarFn): void {\n if (!textoTitulo.isClassDeclaration(node)) return;\n const cls = node as ClassDeclaration;\n if (!cls.superClass || !textoTitulo.isIdentifier(cls.superClass) || cls.superClass.name !== 'Command') return;\n const classNome = cls.id?.name || '';\n const bodyArray = (cls.body as { body?: unknown }).body;\n const isRunMethod = (method: unknown): method is ClassMethod => {\n if (!textoTitulo.isClassMethod(method as Node)) return false;\n const k = (method as ClassMethod).key;\n return textoTitulo.isIdentifier(k) && k.name === 'run';\n };\n const bodyElem = Array.isArray(bodyArray) ? bodyArray?.find(isRunMethod) as ClassMethod | undefined : undefined;\n if (bodyElem && bodyElem.body && textoTitulo.isBlockStatement(bodyElem.body)) {\n registrar(textoTitulo.callExpression(textoTitulo.identifier('oclifRun'), []), classNome, bodyElem as Node, 'oclif');\n }\n}\n\nfunction detectarImportCommander(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isImportDeclaration(node)) return;\n const imp = node as ImportDeclaration;\n if (typeof imp.source.value !== 'string' || !/commander/.test(imp.source.value)) return;\n for (const spec of imp.specifiers) {\n if (textoTitulo.isImportSpecifier(spec) && textoTitulo.isIdentifier(spec.imported) && spec.imported.name === 'Command') {\n if (textoTitulo.isIdentifier(spec.local)) state.commandClassNomes.add(spec.local.name);\n }\n }\n}\n\nfunction detectarVarUsage(node: textoTitulo.Node, state: AnaliseState): void {\n if (!textoTitulo.isFunctionDeclaration(node) && !textoTitulo.isFunctionExpression(node) && !textoTitulo.isArrowFunctionExpression(node)) return;\n const fnBody = (node as FunctionDeclaration | FunctionExpression | ArrowFunctionExpression).body;\n if (!fnBody || !textoTitulo.isBlockStatement(fnBody)) return;\n const createdVars = new Set<string>();\n for (const stmt of fnBody.body || []) {\n if (textoTitulo.isVariableDeclaration(stmt)) {\n for (const decl of stmt.declarations) {\n if (decl.id && textoTitulo.isIdentifier(decl.id) && decl.init && textoTitulo.isNewExpression(decl.init) && textoTitulo.isIdentifier(decl.init.callee) && state.commandClassNomes.has(decl.init.callee.name)) {\n createdVars.add(decl.id.name);\n }\n }\n } else if (textoTitulo.isExpressionStatement(stmt) && textoTitulo.isCallExpression(stmt.expression) && textoTitulo.isMemberExpression(stmt.expression.callee)) {\n const obj = stmt.expression.callee.object;\n if (textoTitulo.isIdentifier(obj) && createdVars.has(obj.name)) {\n state.hasFrameworkSignal = true;\n }\n } else if (textoTitulo.isReturnStatement(stmt) && stmt.argument) {\n if (textoTitulo.isIdentifier(stmt.argument) && createdVars.has(stmt.argument.name)) {\n state.hasFrameworkSignal = true;\n if (state.comandosInvocados === 0) state.comandosInvocados++;\n }\n }\n }\n}\n\n// ── Registrar factory ──────────────────────────────────────────────────\n\nfunction criarRegistrar(state: AnaliseState): RegistrarFn {\n return (node: unknown, comandoNome: string, handler: unknown, origemFramework: string) => {\n state.comandosInvocados++;\n if (comandoNome) state.comandoNomes.push(comandoNome);\n const userInfo = extractHandlerInfo(handler as Node | undefined);\n const registro: ComandoRegistro = {\n comandoNome,\n id: undefined,\n timestamp: new Date().toISOString(),\n origemFramework\n };\n registro.handler = userInfo ? {\n ...userInfo\n } as HandlerInfo : undefined;\n registro.node = node as Node | undefined;\n state.comandos.push(registro);\n };\n}\n\n// ── Name extraction ────────────────────────────────────────────────────\n\nfunction extrairNomeDeCadeia(call: textoTitulo.CallExpression): string {\n let current: textoTitulo.Node | null = call as textoTitulo.Node;\n const visitados = new Set<textoTitulo.Node>();\n while (current && !visitados.has(current)) {\n visitados.add(current);\n if (textoTitulo.isCallExpression(current) && textoTitulo.isMemberExpression(current.callee)) {\n const callee = current.callee;\n const prop = callee.property;\n if (textoTitulo.isIdentifier(prop) && prop.name === 'command') {\n const arg0 = current.arguments && current.arguments[0];\n if (arg0 && textoTitulo.isStringLiteral(arg0)) return arg0.value;\n }\n const owner = callee.object;\n if (textoTitulo.isCallExpression(owner)) {\n current = owner as textoTitulo.Node;\n continue;\n } else if (textoTitulo.isMemberExpression(owner)) {\n current = owner.object as textoTitulo.Node;\n continue;\n } else {\n break;\n }\n } else if (textoTitulo.isMemberExpression(current)) {\n current = current.object as textoTitulo.Node;\n continue;\n }\n break;\n }\n return '';\n}\n\n// ── Post-traversal processing ──────────────────────────────────────────\n\nfunction verificarComandosDuplicados(comandoNomes: string[], relPath: string): Ocorrencia | null {\n const duplicados = comandoNomes.filter((item, idx) => item && comandoNomes.indexOf(item) !== idx);\n if (duplicados.length === 0) return null;\n return {\n tipo: 'padrao-problematico',\n nivel: 'aviso',\n mensagem: messages.ComandosCliMensagens.comandosDuplicados(duplicados),\n relPath,\n origem: 'analista-comandos-cli'\n };\n}\n\nfunction extrairLinha(handlerInfo: HandlerInfo | undefined, node: Node | undefined): number {\n const fromHandler = extractLineFromNode(handlerInfo);\n if (typeof fromHandler === 'number') return fromHandler;\n const fromNode = extractLineFromNode(node);\n return typeof fromNode === 'number' ? fromNode : 1;\n}\n\nfunction verificarHandlerAnonimo(handlerInfo: HandlerInfo, comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n if (!handlerInfo.isAnonymous || !comandoNome) return null;\n return { tipo: 'padrao-problematico', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerAnonimo(comandoNome), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarMuitosParams(handlerInfo: HandlerInfo, comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n const contagem = handlerInfo.totalParams ?? (Array.isArray(handlerInfo.params) ? handlerInfo.params.length : 0);\n if (contagem <= 3 || !comandoNome) return null;\n return { tipo: 'padrao-problematico', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerMuitosParametros(comandoNome, contagem), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarHandlerLongo(statements: unknown[], comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n if (statements.length <= 30 || !comandoNome) return null;\n return { tipo: 'padrao-problematico', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerMuitoLongo(comandoNome, statements.length), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarTryCatch(statements: unknown[], comandoNome: string | undefined, linha: number, relPath: string): Ocorrencia | null {\n if (statements.length === 0 || !comandoNome) return null;\n if (statements.some((stmt: unknown) => textoTitulo.isTryStatement(stmt as textoTitulo.Node))) return null;\n return { tipo: 'boa-pratica-ausente', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerSemTryCatch(comandoNome), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction verificarFeedback(handlerInfo: HandlerInfo, statements: unknown[], comandoNome: string | undefined, linha: number, relPath: string, conteudo: string): Ocorrencia | null {\n if (statements.length === 0 || !comandoNome) return null;\n const bodyInicio = getNumberProp(handlerInfo.bodyBlock, 'start');\n const bodyFim = getNumberProp(handlerInfo.bodyBlock, 'end');\n const bodySlice = typeof bodyInicio === 'number' && typeof bodyFim === 'number' ? conteudo.substring(bodyInicio, bodyFim) : '';\n const bodySrc = (bodySlice && bodySlice.length > 5 ? bodySlice : conteudo);\n const regexLog = /console\\.(log|warn|error)|logger\\.|ctx\\.(reply|send|res|response)/;\n if (regexLog.test(bodySrc) || regexLog.test(conteudo)) return null;\n return { tipo: 'boa-pratica-ausente', nivel: 'aviso', mensagem: messages.ComandosCliMensagens.handlerSemFeedback(comandoNome), relPath, linha, origem: 'analista-comandos-cli' };\n}\n\nfunction processarComandosRegistrados(\n comandos: ComandoRegistro[],\n comandoNomes: string[],\n comandosInvocados: number,\n hasFrameworkSignal: boolean,\n relPath: string,\n conteudo: string,\n contextoProjeto: ReturnType<typeof detectarContextoProjeto>,\n): Ocorrencia[] {\n const ocorrencias: Ocorrencia[] = [];\n\n if (comandosInvocados === 0 && !hasFrameworkSignal && (contextoProjeto.isBot || contextoProjeto.isCLI) && !contextoProjeto.isInfrastructure) {\n ocorrencias.push({ tipo: 'padrao-ausente', nivel: 'info', mensagem: messages.ComandosCliMensagens.padraoAusente, relPath, origem: 'analista-comandos-cli' });\n }\n\n const duplicata = verificarComandosDuplicados(comandoNomes, relPath);\n if (duplicata) ocorrencias.push(duplicata);\n\n for (const cmd of comandos) {\n const handlerInfo = cmd.handler;\n if (!handlerInfo || !handlerInfo.bodyBlock) continue;\n const linha = extrairLinha(handlerInfo, cmd.node);\n const statements = Array.isArray(handlerInfo.bodyBlock.body) ? handlerInfo.bodyBlock.body : [];\n\n for (const ocorrencia of [\n verificarHandlerAnonimo(handlerInfo, cmd.comandoNome, linha, relPath),\n verificarMuitosParams(handlerInfo, cmd.comandoNome, linha, relPath),\n verificarHandlerLongo(statements, cmd.comandoNome, linha, relPath),\n verificarTryCatch(statements, cmd.comandoNome, linha, relPath),\n verificarFeedback(handlerInfo, statements, cmd.comandoNome, linha, relPath, conteudo),\n ]) {\n if (ocorrencia) ocorrencias.push(ocorrencia);\n }\n }\n\n if (comandos.length > 1) {\n ocorrencias.push({ tipo: 'padrao-estrutural', nivel: 'info', mensagem: messages.ComandosCliMensagens.multiplosComandos(comandos.length), relPath, origem: 'analista-comandos-cli' });\n }\n\n return ocorrencias;\n}\n\n// ── Analyst export ─────────────────────────────────────────────────────\n\nexport const analistaComandosCli = {\n nome: 'analista-comandos-cli',\n test: (relPath: string): boolean => {\n const caminho = relPath.replace(/\\\\/g, '/').toLowerCase();\n if (/(^|\\/)tests?(\\/)/i.test(caminho) || /\\.(test|spec)\\.(ts|js|tsx|jsx)$/i.test(caminho)) return false;\n return /(\\.ts|\\.tsx|\\.js|\\.jsx)$/.test(caminho);\n },\n aplicar(conteudo: string, arquivo: string, ast: NodePath | null, _fullPath?: string, _contexto?: ContextoExecucao): TecnicaAplicarResultado {\n const contextoProjeto = detectarContextoProjeto({\n arquivo,\n conteudo,\n relPath: arquivo\n });\n if (!isRelevanteParaAnalise(contextoProjeto, 'comando')) return [];\n if (!ast) return [];\n\n const state: AnaliseState = {\n comandos: [],\n comandoNomes: [],\n comandosInvocados: 0,\n hasFrameworkSignal: false,\n commandClassNomes: new Set<string>(['Command']),\n };\n\n const registrar = criarRegistrar(state);\n type Detector = (node: textoTitulo.Node) => void;\n const detectores: Detector[] = [\n (n) => detectarNewCommand(n, state),\n (n) => detectarDiscordJs(n, state),\n (n) => detectarCommanderChainMethods(n, state),\n (n) => detectarGenericCommand(n, state, registrar),\n (n) => detectarCommanderAction(n, state, registrar),\n (n) => detectarCommanderCommand(n, state, registrar),\n (n) => detectarYargs(n, state, registrar),\n (n) => detectarOclif(n, state, registrar),\n (n) => detectarImportCommander(n, state),\n (n) => detectarVarUsage(n, state),\n ];\n\n traverse(ast.node, {\n enter(path: NodePath<textoTitulo.Node>) {\n const nodeAtual = path.node as BabelNode;\n for (const detector of detectores) detector(nodeAtual);\n }\n });\n\n return processarComandosRegistrados(\n state.comandos,\n state.comandoNomes,\n state.comandosInvocados,\n state.hasFrameworkSignal,\n arquivo,\n conteudo,\n contextoProjeto,\n );\n }\n};\n"]}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
export * from '../dashboard/index.js';
|
|
2
|
+
export * from './check-run-builder.js';
|
|
3
|
+
export * from './check-suite-handler.js';
|
|
2
4
|
export * from './installation-store.js';
|
|
5
|
+
export * from './issues-handler.js';
|
|
6
|
+
export * from './octokit.js';
|
|
7
|
+
export * from './pr-review-handler.js';
|
|
3
8
|
export * from './repo-downloader.js';
|
|
4
9
|
export * from './server.js';
|
|
5
10
|
export * from './setup-routes.js';
|
|
6
11
|
export * from './webhook-handler.js';
|
|
12
|
+
export * from './workflow-reader.js';
|
|
7
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/github/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/github/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
export * from '../dashboard/index.js';
|
|
2
|
+
export * from './check-run-builder.js';
|
|
3
|
+
export * from './check-suite-handler.js';
|
|
2
4
|
export * from './installation-store.js';
|
|
5
|
+
export * from './issues-handler.js';
|
|
6
|
+
export * from './octokit.js';
|
|
7
|
+
export * from './pr-review-handler.js';
|
|
3
8
|
export * from './repo-downloader.js';
|
|
4
9
|
export * from './server.js';
|
|
5
10
|
export * from './setup-routes.js';
|
|
6
11
|
export * from './webhook-handler.js';
|
|
12
|
+
export * from './workflow-reader.js';
|
|
7
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app/github/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from '../dashboard/index.js';\nexport * from './installation-store.js';\nexport * from './repo-downloader.js';\nexport * from './server.js';\nexport * from './setup-routes.js';\nexport * from './webhook-handler.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app/github/app/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from '../dashboard/index.js';\nexport * from './check-run-builder.js';\nexport * from './check-suite-handler.js';\nexport * from './installation-store.js';\nexport * from './issues-handler.js';\nexport * from './octokit.js';\nexport * from './pr-review-handler.js';\nexport * from './repo-downloader.js';\nexport * from './server.js';\nexport * from './setup-routes.js';\nexport * from './webhook-handler.js';\nexport * from './workflow-reader.js';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-routes.d.ts","sourceRoot":"","sources":["../../../../src/app/github/app/setup-routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,EAAE,MAAM,SAAS,CAAC;AAc9D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"setup-routes.d.ts","sourceRoot":"","sources":["../../../../src/app/github/app/setup-routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,EAAE,MAAM,SAAS,CAAC;AAc9D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA6DlD;AAED,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAYnD"}
|
|
@@ -14,7 +14,6 @@ export function createSetupRouter(app) {
|
|
|
14
14
|
const router = Router();
|
|
15
15
|
router.get('/setup', async (req, res) => {
|
|
16
16
|
const installationIdRaw = req.query.installation_id;
|
|
17
|
-
const setupAction = typeof req.query.setup_action === 'string' ? req.query.setup_action : 'install';
|
|
18
17
|
const installationId = typeof installationIdRaw === 'string'
|
|
19
18
|
? parseInt(installationIdRaw, 10)
|
|
20
19
|
: Array.isArray(installationIdRaw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-routes.js","sourceRoot":"","sources":["../../../../src/app/github/app/setup-routes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAA+B,MAAM,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,SAAS,aAAa,CAAC,GAAY;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACrE,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAY,IAAI,GAAG,CAAC,QAAQ,CAAC;IAC3E,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACjE,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACzD,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-routes.js","sourceRoot":"","sources":["../../../../src/app/github/app/setup-routes.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { GithubSetupMensagens, messages } from '@core/messages';\nimport type { App } from '@octokit/app';\nimport { type Request, type Response, Router } from 'express';\n\nimport { salvarConfigInstalacao } from './installation-store.js';\n\nconst HTTP_BAD_REQUEST = 400;\n\nfunction publicBaseUrl(req: Request): string {\n const env = process.env.TUTANUS_PUBLIC_URL || process.env.PUBLIC_URL;\n if (env) return env.replace(/\\/$/, '');\n const proto = (req.headers['x-forwarded-proto'] as string) || req.protocol;\n const host = req.headers['x-forwarded-host'] || req.headers.host;\n return `${proto}://${host}`;\n}\n\nexport function createSetupRouter(app: App): Router {\n const router = Router();\n\n router.get('/setup', async (req: Request, res: Response) => {\n const installationIdRaw = req.query.installation_id;\n\n const installationId = typeof installationIdRaw === 'string'\n ? parseInt(installationIdRaw, 10)\n : Array.isArray(installationIdRaw)\n ? parseInt(installationIdRaw[0] as string, 10)\n : NaN;\n\n if (!installationId || Number.isNaN(installationId)) {\n res.status(HTTP_BAD_REQUEST).type('html').send(\n GithubSetupMensagens.installationIdAusente\n );\n return;\n }\n\n try {\n salvarConfigInstalacao({\n installationId,\n pushAnalysisEnabled: true,\n pullRequestAnalysisEnabled: true,\n fast: false,\n incrementalOnPush: true\n });\n } catch (err) {\n messages.log.erro(`${GithubSetupMensagens.erroSalvarConfig}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n let destino = 'https://github.com';\n\n try {\n const { data: installation } = await app.octokit.request('GET /app/installations/{installation_id}', {\n installation_id: installationId,\n });\n const account = installation.account;\n const username = account && 'login' in account ? account.login :\n account && 'slug' in account ? account.slug : null;\n if (username) {\n destino = `https://github.com/${username}`;\n }\n } catch (err) {\n messages.log.erro(`Falha ao buscar instalacao ${installationId}: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n res.redirect(302, destino);\n });\n\n router.get('/setup-info', (req: Request, res: Response) => {\n const base = publicBaseUrl(req);\n res.json({\n setupUrl: `${base}/api/github/setup`,\n redirectAfterInstall: 'https://github.com/settings/installations/{installation_id}',\n instrucao:\n 'No painel do GitHub App, defina \"Setup URL\" como setupUrl. Após instalar, o usuário permanece no GitHub.'\n });\n });\n\n return router;\n}\n\nexport function buildSetupUrl(req?: Request): string {\n const env = process.env.TUTANUS_PUBLIC_URL || process.env.PUBLIC_URL;\n if (env) return `${env.replace(/\\/$/, '')}/api/github/setup`;\n if (req) {\n const base = (() => {\n const proto = (req.headers['x-forwarded-proto'] as string) || req.protocol;\n const host = req.headers['x-forwarded-host'] || req.headers.host;\n return `${proto}://${host}`;\n })();\n return `${base}/api/github/setup`;\n }\n return '/api/github/setup';\n}\n"]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export type { AnalysisResult, WebhookEvent } from '../../../types/github/app.js';
|
|
2
|
+
export * from './layout.js';
|
|
3
|
+
export * from './page.js';
|
|
2
4
|
export { createDashboardRouter } from './routes.js';
|
|
3
5
|
export { statsStore } from './stats-store.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/github/dashboard/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/github/dashboard/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjF,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app/github/dashboard/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export type { AnalysisResult, WebhookEvent } from '../../../types/github/app.js';\nexport { createDashboardRouter } from './routes.js';\nexport { statsStore } from './stats-store.js';\n
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app/github/dashboard/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export type { AnalysisResult, WebhookEvent } from '../../../types/github/app.js';\nexport * from './layout.js';\nexport * from './page.js';\nexport { createDashboardRouter } from './routes.js';\nexport { statsStore } from './stats-store.js';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../src/app/github/dashboard/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,GAAG,GAAG,CAAC,OAAO,CAEd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../../src/app/github/dashboard/layout.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,GAGT;IACC,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC","sourcesContent":["import type { JSX } from \"react\";\n\nexport default function DashboardLayout({\n children,\n}: {\n children: React.ReactNode;\n}): JSX.Element {\n return <>{children}</>;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/app/github/dashboard/page.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAGjC,MAAM,CAAC,OAAO,UAAU,iBAAiB,IAAI,GAAG,CAAC,OAAO,CAMvD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
export default function DashboardRedirect() {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
window.location.href = '/';
|
|
7
|
+
}, []);
|
|
8
|
+
return _jsx("p", { children: "Redirecionando..." });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/app/github/dashboard/page.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,4CAAwB,CAAC;AAClC,CAAC","sourcesContent":["'use client';\n\nimport type { JSX } from 'react';\nimport { useEffect } from 'react';\n\nexport default function DashboardRedirect(): JSX.Element {\n useEffect(() => {\n window.location.href = '/';\n }, []);\n\n return <p>Redirecionando...</p>;\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { iniciarAutoFix } from './auto-fix-job.js';
|
|
2
2
|
export { iniciarAnaliseCompleta } from './full-analysis-job.js';
|
|
3
|
+
export * from './full-analysis-utils.js';
|
|
3
4
|
export { atualizarJob, criarJob, listarJobs, obterJob } from './job-manager.js';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/github/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app/github/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,YAAY,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
|