{"version":3,"sources":["../typescript/src/eslint-plugin/index.ts"],"names":[],"mappings":"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","file":"eslint-plugin.cjs","sourcesContent":["/**\n * ESLint Plugin for SemanticDOM\n * Provides linting rules for semantic accessibility and agent-readiness\n *\n * @packageDocumentation\n */\n\nimport type { Rule } from 'eslint';\n\n/**\n * Rule: require-accessible-name\n * Ensures interactive elements have accessible names\n */\nconst requireAccessibleName: Rule.RuleModule = {\n  meta: {\n    type: 'problem',\n    docs: {\n      description: 'Require interactive elements to have accessible names',\n      category: 'Accessibility',\n      recommended: true,\n    },\n    fixable: undefined,\n    schema: [],\n    messages: {\n      missingAccessibleName:\n        'Interactive element is missing an accessible name. Add aria-label, aria-labelledby, or visible text content.',\n    },\n  },\n  create(context) {\n    const interactiveElements = ['button', 'a', 'input', 'select', 'textarea'];\n    const interactiveRoles = [\n      'button',\n      'link',\n      'textbox',\n      'checkbox',\n      'radio',\n      'combobox',\n      'listbox',\n      'menuitem',\n      'tab',\n    ];\n\n    return {\n      JSXOpeningElement(node: Rule.Node) {\n        const jsxNode = node as unknown as {\n          name: { type: string; name?: string };\n          attributes: Array<{\n            type: string;\n            name?: { type: string; name: string };\n            value?: { type: string; value?: string };\n          }>;\n        };\n\n        if (jsxNode.name.type !== 'JSXIdentifier') return;\n\n        const tagName = jsxNode.name.name?.toLowerCase();\n        if (!tagName) return;\n\n        const role = getAttributeValue(jsxNode.attributes, 'role');\n        const isInteractive =\n          interactiveElements.includes(tagName) ||\n          (role && interactiveRoles.includes(role));\n\n        if (!isInteractive) return;\n\n        const hasAriaLabel = hasAttribute(jsxNode.attributes, 'aria-label');\n        const hasAriaLabelledBy = hasAttribute(jsxNode.attributes, 'aria-labelledby');\n        const hasTitle = hasAttribute(jsxNode.attributes, 'title');\n\n        // Check for text content (simplified - would need JSXText check)\n        if (!hasAriaLabel && !hasAriaLabelledBy && !hasTitle) {\n          context.report({\n            node,\n            messageId: 'missingAccessibleName',\n          });\n        }\n      },\n    };\n  },\n};\n\n/**\n * Rule: valid-role\n * Ensures ARIA roles are valid\n */\nconst validRole: Rule.RuleModule = {\n  meta: {\n    type: 'problem',\n    docs: {\n      description: 'Ensure ARIA roles are valid',\n      category: 'Accessibility',\n      recommended: true,\n    },\n    fixable: undefined,\n    schema: [],\n    messages: {\n      invalidRole: 'Invalid ARIA role \"{{role}}\". Use a valid WAI-ARIA role.',\n    },\n  },\n  create(context) {\n    const validRoles = [\n      'alert',\n      'alertdialog',\n      'application',\n      'article',\n      'banner',\n      'button',\n      'cell',\n      'checkbox',\n      'columnheader',\n      'combobox',\n      'complementary',\n      'contentinfo',\n      'definition',\n      'dialog',\n      'directory',\n      'document',\n      'feed',\n      'figure',\n      'form',\n      'grid',\n      'gridcell',\n      'group',\n      'heading',\n      'img',\n      'link',\n      'list',\n      'listbox',\n      'listitem',\n      'log',\n      'main',\n      'marquee',\n      'math',\n      'menu',\n      'menubar',\n      'menuitem',\n      'menuitemcheckbox',\n      'menuitemradio',\n      'navigation',\n      'none',\n      'note',\n      'option',\n      'presentation',\n      'progressbar',\n      'radio',\n      'radiogroup',\n      'region',\n      'row',\n      'rowgroup',\n      'rowheader',\n      'scrollbar',\n      'search',\n      'searchbox',\n      'separator',\n      'slider',\n      'spinbutton',\n      'status',\n      'switch',\n      'tab',\n      'table',\n      'tablist',\n      'tabpanel',\n      'term',\n      'textbox',\n      'timer',\n      'toolbar',\n      'tooltip',\n      'tree',\n      'treegrid',\n      'treeitem',\n    ];\n\n    return {\n      JSXAttribute(node: Rule.Node) {\n        const attrNode = node as unknown as {\n          name: { type: string; name: string };\n          value: { type: string; value?: string };\n        };\n\n        if (attrNode.name.name !== 'role') return;\n        if (!attrNode.value || attrNode.value.type !== 'Literal') return;\n\n        const role = attrNode.value.value;\n        if (typeof role !== 'string') return;\n\n        // Handle multiple roles\n        const roles = role.split(/\\s+/);\n        for (const r of roles) {\n          if (!validRoles.includes(r.toLowerCase())) {\n            context.report({\n              node,\n              messageId: 'invalidRole',\n              data: { role: r },\n            });\n          }\n        }\n      },\n    };\n  },\n};\n\n/**\n * Rule: semantic-intent\n * Encourages use of data-semantic-intent attribute\n */\nconst semanticIntent: Rule.RuleModule = {\n  meta: {\n    type: 'suggestion',\n    docs: {\n      description: 'Encourage semantic intent annotation for agent readiness',\n      category: 'Best Practices',\n      recommended: false,\n    },\n    fixable: 'code',\n    schema: [],\n    messages: {\n      missingSemnaticIntent:\n        'Interactive element could benefit from data-semantic-intent attribute for better agent understanding.',\n      suggestIntent: 'Add data-semantic-intent=\"{{intent}}\"',\n    },\n  },\n  create(context) {\n    const interactiveElements = ['button', 'a', 'input', 'select'];\n\n    return {\n      JSXOpeningElement(node: Rule.Node) {\n        const jsxNode = node as unknown as {\n          name: { type: string; name?: string };\n          attributes: Array<{\n            type: string;\n            name?: { type: string; name: string };\n            value?: { type: string; value?: string };\n          }>;\n        };\n\n        if (jsxNode.name.type !== 'JSXIdentifier') return;\n\n        const tagName = jsxNode.name.name?.toLowerCase();\n        if (!tagName || !interactiveElements.includes(tagName)) return;\n\n        const hasIntent = hasAttribute(jsxNode.attributes, 'data-semantic-intent');\n        if (hasIntent) return;\n\n        // Suggest based on element type and attributes\n        const suggestedIntent = inferIntent(tagName, jsxNode.attributes);\n\n        context.report({\n          node,\n          messageId: 'missingSemnaticIntent',\n          suggest: suggestedIntent\n            ? [\n                {\n                  messageId: 'suggestIntent',\n                  data: { intent: suggestedIntent },\n                  fix(fixer) {\n                    const lastAttr = jsxNode.attributes[jsxNode.attributes.length - 1];\n                    if (lastAttr) {\n                      return fixer.insertTextAfter(\n                        lastAttr as unknown as Rule.Node,\n                        ` data-semantic-intent=\"${suggestedIntent}\"`\n                      );\n                    }\n                    return null;\n                  },\n                },\n              ]\n            : [],\n        });\n      },\n    };\n  },\n};\n\n/**\n * Rule: no-redundant-role\n * Warns about redundant ARIA roles\n */\nconst noRedundantRole: Rule.RuleModule = {\n  meta: {\n    type: 'suggestion',\n    docs: {\n      description: 'Warn about redundant ARIA roles that match implicit roles',\n      category: 'Best Practices',\n      recommended: true,\n    },\n    fixable: 'code',\n    schema: [],\n    messages: {\n      redundantRole:\n        'The role \"{{role}}\" is redundant on <{{element}}> element. The element already has this implicit role.',\n    },\n  },\n  create(context) {\n    const implicitRoles: Record<string, string> = {\n      a: 'link',\n      article: 'article',\n      aside: 'complementary',\n      button: 'button',\n      dialog: 'dialog',\n      footer: 'contentinfo',\n      form: 'form',\n      h1: 'heading',\n      h2: 'heading',\n      h3: 'heading',\n      h4: 'heading',\n      h5: 'heading',\n      h6: 'heading',\n      header: 'banner',\n      img: 'img',\n      li: 'listitem',\n      main: 'main',\n      nav: 'navigation',\n      ol: 'list',\n      option: 'option',\n      progress: 'progressbar',\n      section: 'region',\n      select: 'listbox',\n      table: 'table',\n      textarea: 'textbox',\n      ul: 'list',\n    };\n\n    return {\n      JSXOpeningElement(node: Rule.Node) {\n        const jsxNode = node as unknown as {\n          name: { type: string; name?: string };\n          attributes: Array<{\n            type: string;\n            name?: { type: string; name: string };\n            value?: { type: string; value?: string };\n          }>;\n        };\n\n        if (jsxNode.name.type !== 'JSXIdentifier') return;\n\n        const tagName = jsxNode.name.name?.toLowerCase();\n        if (!tagName) return;\n\n        const implicitRole = implicitRoles[tagName];\n        if (!implicitRole) return;\n\n        const roleAttr = jsxNode.attributes.find(\n          (attr) =>\n            attr.type === 'JSXAttribute' &&\n            attr.name?.name === 'role' &&\n            attr.value?.type === 'Literal' &&\n            attr.value.value === implicitRole\n        );\n\n        if (roleAttr) {\n          context.report({\n            node: roleAttr as unknown as Rule.Node,\n            messageId: 'redundantRole',\n            data: { role: implicitRole, element: tagName },\n            fix(fixer) {\n              return fixer.remove(roleAttr as unknown as Rule.Node);\n            },\n          });\n        }\n      },\n    };\n  },\n};\n\n/**\n * Rule: require-heading-hierarchy\n * Ensures heading levels follow proper hierarchy\n */\nconst requireHeadingHierarchy: Rule.RuleModule = {\n  meta: {\n    type: 'problem',\n    docs: {\n      description: 'Ensure heading levels follow proper hierarchy',\n      category: 'Accessibility',\n      recommended: true,\n    },\n    fixable: undefined,\n    schema: [],\n    messages: {\n      skippedLevel:\n        'Heading level skipped. Expected h{{expected}} but found h{{actual}}. Heading levels should not skip.',\n    },\n  },\n  create(context) {\n    let lastHeadingLevel = 0;\n\n    return {\n      'Program:exit'() {\n        lastHeadingLevel = 0;\n      },\n      JSXOpeningElement(node: Rule.Node) {\n        const jsxNode = node as unknown as {\n          name: { type: string; name?: string };\n        };\n\n        if (jsxNode.name.type !== 'JSXIdentifier') return;\n\n        const tagName = jsxNode.name.name?.toLowerCase();\n        if (!tagName) return;\n\n        const match = tagName.match(/^h([1-6])$/);\n        if (!match) return;\n\n        const level = parseInt(match[1], 10);\n\n        if (lastHeadingLevel > 0 && level > lastHeadingLevel + 1) {\n          context.report({\n            node,\n            messageId: 'skippedLevel',\n            data: {\n              expected: (lastHeadingLevel + 1).toString(),\n              actual: level.toString(),\n            },\n          });\n        }\n\n        lastHeadingLevel = level;\n      },\n    };\n  },\n};\n\n/**\n * Rule: prefer-semantic-elements\n * Encourages semantic HTML over div/span with roles\n */\nconst preferSemanticElements: Rule.RuleModule = {\n  meta: {\n    type: 'suggestion',\n    docs: {\n      description: 'Prefer semantic HTML elements over div/span with roles',\n      category: 'Best Practices',\n      recommended: true,\n    },\n    fixable: undefined,\n    schema: [],\n    messages: {\n      preferSemantic:\n        'Prefer using <{{element}}> instead of <{{actual}}> with role=\"{{role}}\".',\n    },\n  },\n  create(context) {\n    const roleToElement: Record<string, string> = {\n      article: 'article',\n      banner: 'header',\n      button: 'button',\n      complementary: 'aside',\n      contentinfo: 'footer',\n      form: 'form',\n      heading: 'h1-h6',\n      link: 'a',\n      list: 'ul/ol',\n      listitem: 'li',\n      main: 'main',\n      navigation: 'nav',\n      region: 'section',\n    };\n\n    return {\n      JSXOpeningElement(node: Rule.Node) {\n        const jsxNode = node as unknown as {\n          name: { type: string; name?: string };\n          attributes: Array<{\n            type: string;\n            name?: { type: string; name: string };\n            value?: { type: string; value?: string };\n          }>;\n        };\n\n        if (jsxNode.name.type !== 'JSXIdentifier') return;\n\n        const tagName = jsxNode.name.name?.toLowerCase();\n        if (tagName !== 'div' && tagName !== 'span') return;\n\n        const role = getAttributeValue(jsxNode.attributes, 'role');\n        if (!role) return;\n\n        const semanticElement = roleToElement[role];\n        if (semanticElement) {\n          context.report({\n            node,\n            messageId: 'preferSemantic',\n            data: {\n              element: semanticElement,\n              actual: tagName,\n              role,\n            },\n          });\n        }\n      },\n    };\n  },\n};\n\n// Helper functions\n\nfunction hasAttribute(\n  attributes: Array<{\n    type: string;\n    name?: { type: string; name: string };\n  }>,\n  name: string\n): boolean {\n  return attributes.some(\n    (attr) => attr.type === 'JSXAttribute' && attr.name?.name === name\n  );\n}\n\nfunction getAttributeValue(\n  attributes: Array<{\n    type: string;\n    name?: { type: string; name: string };\n    value?: { type: string; value?: string };\n  }>,\n  name: string\n): string | undefined {\n  const attr = attributes.find(\n    (a) => a.type === 'JSXAttribute' && a.name?.name === name\n  );\n  if (!attr || !attr.value) return undefined;\n  if (attr.value.type === 'Literal') return attr.value.value;\n  return undefined;\n}\n\nfunction inferIntent(\n  tagName: string,\n  attributes: Array<{\n    type: string;\n    name?: { type: string; name: string };\n    value?: { type: string; value?: string };\n  }>\n): string | undefined {\n  const type = getAttributeValue(attributes, 'type');\n\n  if (tagName === 'a') return 'navigate';\n  if (tagName === 'button') {\n    if (type === 'submit') return 'submit';\n    return 'toggle';\n  }\n  if (tagName === 'input') {\n    if (type === 'submit') return 'submit';\n    if (type === 'checkbox' || type === 'radio') return 'toggle';\n    if (type === 'search') return 'search';\n    return 'input';\n  }\n  if (tagName === 'select') return 'select';\n\n  return undefined;\n}\n\n/**\n * All rules\n */\nexport const rules: Record<string, Rule.RuleModule> = {\n  'require-accessible-name': requireAccessibleName,\n  'valid-role': validRole,\n  'semantic-intent': semanticIntent,\n  'no-redundant-role': noRedundantRole,\n  'require-heading-hierarchy': requireHeadingHierarchy,\n  'prefer-semantic-elements': preferSemanticElements,\n};\n\n/**\n * Recommended configuration\n * Note: For ESLint flat config, use the plugin directly\n */\nexport const configs = {\n  recommended: {\n    rules: {\n      'semantic-dom/require-accessible-name': 'error',\n      'semantic-dom/valid-role': 'error',\n      'semantic-dom/no-redundant-role': 'warn',\n      'semantic-dom/require-heading-hierarchy': 'warn',\n      'semantic-dom/prefer-semantic-elements': 'warn',\n    },\n  },\n  strict: {\n    rules: {\n      'semantic-dom/require-accessible-name': 'error',\n      'semantic-dom/valid-role': 'error',\n      'semantic-dom/semantic-intent': 'error',\n      'semantic-dom/no-redundant-role': 'error',\n      'semantic-dom/require-heading-hierarchy': 'error',\n      'semantic-dom/prefer-semantic-elements': 'error',\n    },\n  },\n  'agent-ready': {\n    rules: {\n      'semantic-dom/require-accessible-name': 'error',\n      'semantic-dom/valid-role': 'error',\n      'semantic-dom/semantic-intent': 'warn',\n      'semantic-dom/no-redundant-role': 'warn',\n      'semantic-dom/require-heading-hierarchy': 'error',\n      'semantic-dom/prefer-semantic-elements': 'warn',\n    },\n  },\n};\n\n/**\n * Plugin export\n */\nexport default {\n  rules,\n  configs,\n};\n"]}