{"_id":"@asuaarch/eslint-plugin-asua","_rev":"2-1c880e47c8951d32bd2cafc557782627","name":"@asuaarch/eslint-plugin-asua","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@asuaarch/eslint-plugin-asua","version":"1.0.0","keywords":["eslint","eslintplugin","eslint-plugin","asua","architecture","react","nextjs","frontend-architecture","axiom"],"author":{"name":"Habtamu Geta","email":"habtamu.geta@aastustudent.edu.et"},"license":"Apache-2.0","_id":"@asuaarch/eslint-plugin-asua@1.0.0","maintainers":[{"name":"asuaarch","email":"habte2529@gmail.com"}],"homepage":"https://github.com/habte2529-ai/eslint-plugin-asua#readme","bugs":{"url":"https://github.com/habte2529-ai/eslint-plugin-asua/issues"},"dist":{"shasum":"222d940a6772d3f259abe1421aad4955b2abff1b","tarball":"https://registry.npmjs.org/@asuaarch/eslint-plugin-asua/-/eslint-plugin-asua-1.0.0.tgz","fileCount":87,"integrity":"sha512-ST3GF2f1Mrf8e/+pnOnJ1z1tAjL4QwuggyezCwqEdPfx67CTeMshO1HNkNq6FHaKP0V6JHVwrGePUiXpfxHW7g==","signatures":[{"sig":"MEUCIQCnrZ/gtP1kApEMDIzqmzd+zkKoruAUIsqfpGl7AyqrFQIgVnJC2mYYz9GWzyS24FvGJiZzcNzvuUe3ikpnAqGMgWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124931},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7a3796a867a67d19c2088d9a79a06d4948513b5c","scripts":{"lint":"eslint src/ --ext .ts","test":"vitest run","build":"tsc","prepare":"husky","release":"npm run build && npm publish","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm run test"},"_npmUser":{"name":"asuaarch","email":"habte2529@gmail.com"},"repository":{"url":"git+https://github.com/habte2529-ai/eslint-plugin-asua.git","type":"git"},"_npmVersion":"11.8.0","description":"ESLint plugin enforcing ASUA (Axiom-Stratum Unified Architecture) laws for React and Next.js projects.","directories":{},"lint-staged":{"src/**/*.{ts,tsx}":["eslint --fix","tsc --noEmit --pretty"]},"_nodeVersion":"24.13.0","publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.11","eslint":"^8.57.0","vitest":"^1.6.0","typescript":"^5.4.0","@types/node":"^25.2.2","lint-staged":"^15.2.2","@types/eslint":"^8.56.0","@types/estree":"^1.0.5","@vitest/coverage-v8":"^1.6.0","@typescript-eslint/utils":"^7.0.0","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/rule-tester":"^7.0.0"},"peerDependencies":{"eslint":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eslint-plugin-asua_1.0.0_1770651549387_0.4564473400358038","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@asuaarch/eslint-plugin-asua","version":"1.0.1","description":"ESLint plugin enforcing ASUA (Axiom-Stratum Unified Architecture) laws for React and Next.js projects.","keywords":["eslint","eslintplugin","eslint-plugin","asua","architecture","react","nextjs","frontend-architecture","axiom"],"author":{"name":"Habtamu Geta","email":"habtamu.geta@aastustudent.edu.et"},"license":"Apache-2.0","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"eslint src/ --ext .ts","prepublishOnly":"npm run build && npm run test","release":"npm run build && npm publish","prepare":"husky"},"devDependencies":{"@types/eslint":"^8.56.0","@types/estree":"^1.0.5","@types/node":"^25.2.2","@typescript-eslint/parser":"^7.0.0","@typescript-eslint/rule-tester":"^7.0.0","@typescript-eslint/utils":"^7.0.0","@vitest/coverage-v8":"^1.6.0","eslint":"^8.57.0","husky":"^9.0.11","lint-staged":"^15.2.2","typescript":"^5.4.0","vitest":"^1.6.0"},"peerDependencies":{"eslint":">=8.0.0"},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/habte2529-ai/eslint-plugin-asua.git"},"homepage":"https://github.com/habte2529-ai/eslint-plugin-asua#readme","bugs":{"url":"https://github.com/habte2529-ai/eslint-plugin-asua/issues"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"lint-staged":{"src/**/*.{ts,tsx}":["eslint --fix","tsc --noEmit --pretty"]},"gitHead":"a7f7cf1100d3552b7e33a6d88b00c5ffeef7855d","_id":"@asuaarch/eslint-plugin-asua@1.0.1","_nodeVersion":"24.13.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-pqUf+481o3wubanGArmYuI7qtYTT4PK6BhWA19ori2cIhWQJ4aH0PJF88C3LcW66iiVqLGPiJGgq4pOKY3fPjw==","shasum":"ba670b1687562e235ef1e7e211c801784402c1df","tarball":"https://registry.npmjs.org/@asuaarch/eslint-plugin-asua/-/eslint-plugin-asua-1.0.1.tgz","fileCount":87,"unpackedSize":124931,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDw8ZXfi+7PgXaJkdcswWAPU3BMYcqFtguWuSjJO5prZQIgTyKU4B8wswwUDtsa1QPWoRTjwl1oZHlz0tx2w6mmbsY="}]},"_npmUser":{"name":"asuaarch","email":"habte2529@gmail.com"},"directories":{},"maintainers":[{"name":"asuaarch","email":"habte2529@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-plugin-asua_1.0.1_1770654314817_0.6872421052806603"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-09T15:39:09.322Z","modified":"2026-02-09T16:25:15.074Z","1.0.0":"2026-02-09T15:39:09.562Z","1.0.1":"2026-02-09T16:25:14.973Z"},"bugs":{"url":"https://github.com/habte2529-ai/eslint-plugin-asua/issues"},"author":{"name":"Habtamu Geta","email":"habtamu.geta@aastustudent.edu.et"},"license":"Apache-2.0","homepage":"https://github.com/habte2529-ai/eslint-plugin-asua#readme","keywords":["eslint","eslintplugin","eslint-plugin","asua","architecture","react","nextjs","frontend-architecture","axiom"],"repository":{"type":"git","url":"git+https://github.com/habte2529-ai/eslint-plugin-asua.git"},"description":"ESLint plugin enforcing ASUA (Axiom-Stratum Unified Architecture) laws for React and Next.js projects.","maintainers":[{"name":"asuaarch","email":"habte2529@gmail.com"}],"readme":"<div align=\"center\">\n\n# 🏗️ eslint-plugin-asua\n\n**Enforce Axiom-Stratum Unified Architecture (ASUA) with Surgical Precision**\n\n[![version](https://img.shields.io/github/v/release/habte2529-ai/eslint-plugin-asua?label=version&style=flat-square&color=007acc)](https://github.com/habte2529-ai/eslint-plugin-asua/releases)\n[![license](https://img.shields.io/github/license/habte2529-ai/eslint-plugin-asua?style=flat-square&color=42b883)](./LICENSE)\n[![build](https://img.shields.io/github/actions/workflow/status/habte2529-ai/eslint-plugin-asua/asua-architecture.yml?style=flat-square)](https://github.com/habte2529-ai/eslint-plugin-asua/actions)\n[![stars](https://img.shields.io/github/stars/habte2529-ai/eslint-plugin-asua?style=flat-square&color=ffca28)](https://github.com/habte2529-ai/eslint-plugin-asua/stargazers)\n\n---\n\nASUA transforms frontend architecture from a \"handshake agreement\" into **verifiable system constraints**.\nThis plugin makes architectural violations build errors—not just code review comments.\n\n[**Philosophy**](#-the-philosophy) • [**Quick Start**](#-quick-start) • [**Layers**](#-the-six-layers) • [**Rules**](#-enforced-rules)\n\n</div>\n\n## 🚀 Why ASUA?\n\nTraditional architectures drift. ASUA stays rigid where it matters:\n\n- **Zero Circular Dependencies**: Law 1 (Down Only) ensures a strict vertical flow.\n- **Isolated Domains**: Law 4 (Feature Isolation) prevents \"spaghetti modules\".\n- **Self-Documenting Code**: ASUA headers reveal a file's intent at a glance.\n- **Predictable Performance**: Purity and Runtime constraints enforced at the compiler level.\n\n---\n\n## 🛠️ Installation\n\n```bash\nnpm install eslint-plugin-asua --save-dev\n```\n\n## ⚡ Quick Start\n\nAdd the starter profile to your `.eslintrc.js`:\n\n```javascript\nmodule.exports = {\n  extends: [\"plugin:asua/starter\"],\n};\n```\n\n_That's it. You now have Law 1 (Down Only) and Header Validation active._\n\n---\n\n## 🧬 The Six Layers\n\n| Layer               | Type | Question                     | Example                       |\n| :------------------ | :--- | :--------------------------- | :---------------------------- |\n| **L0 Foundation**   | 🏗️   | \"What technical capability?\" | API clients, caching          |\n| **L1 Boundary**     | ⛩️   | \"What application?\"          | `layout.tsx`, providers       |\n| **L2 Screen**       | 📱   | \"What route?\"                | `page.tsx`                    |\n| **L3 Orchestrator** | 🧠   | \"What data/logic?\"           | Fetch → Decide → Compose      |\n| **L4 Structure**    | 📐   | \"Where does content go?\"     | Layouts with typed slots      |\n| **L5 Meaning**      | 💎   | \"What domain concept?\"       | `ProductCard`, `OrderSummary` |\n| **L6 Element**      | 🧱   | \"What visual primitive?\"     | `Button`, `Badge`, `Card`     |\n\n---\n\n## ⚖️ Enforced Rules\n\n| Rule                     | Law       | Default    | Fixable |\n| :----------------------- | :-------- | :--------- | :------ |\n| `asua/down-only`         | **Law 1** | 🔴 `error` | No      |\n| `asua/orthogonality`     | **Law 2** | 🔴 `error` | No      |\n| `asua/single-question`   | **Law 3** | 🟡 `warn`  | No      |\n| `asua/feature-isolation` | **Law 4** | 🔴 `error` | No      |\n| `asua/valid-header`      | —         | 🔴 `error` | No      |\n| `asua/valid-layer-kind`  | —         | 🔴 `error` | No      |\n\n---\n\n## ✍️ Usage: ASUA Headers\n\nAdd these headers to your files to define their architectural \"Passport\":\n\n```typescript\n// @asua layer: meaning\n// @asua kind: domain\n// @asua runtime: client\n// @asua purity: pure\n\nexport function ProductCard({ product }: ProductCardProps) {\n  return <Card>{product.name}</Card>\n}\n```\n\n---\n\n## ⚙️ Advanced Configuration\n\n### Custom Mapping\n\nMap your existing directory structure to ASUA layers:\n\n```javascript\nrules: {\n  'asua/down-only': ['error', {\n    directoryMap: {\n      'components': 'element',\n      'containers': 'orchestrator',\n      'views': 'structure',\n    },\n    srcRoot: 'src',\n  }],\n}\n```\n\n---\n\n## 📖 Related Resources\n\n- [**ASUA Manuscript**](https://github.com/habtamu-geta/asua) — The core architectural methodology.\n- [**Rule Documentation**](./docs/rules/) — Detailed guides for every rule.\n\n---\n\n## 📜 License\n\nApache License 2.0 © **Habtamu Geta**\n","readmeFilename":"README.md"}