UNPKG

@feature-sliced/eslint-config

Version:

🍰 Lint feature-sliced concepts by existing eslint plugins

105 lines (82 loc) 3.05 kB
# @feature-sliced/public-api #### Reference: [PublicAPI](https://feature-sliced.design/docs/concepts/public-api) ## Usage Add `"@feature-sliced/eslint-config/rules/public-api"` to your `extends` section in ESLint config. #### Slices PublicAPI ```js // 👎 Fail import { Issues } from "pages/issues/ui"; import { IssueDetails } from "widgets/issue-details/ui/details" import { AuthForm } from "features/auth-form/ui/form" import { Button } from "shared/ui/button/button"; import { saveOrder } from "entities/order/model/actions"; import { orderModel } from "entities/order/model"; import { TicketCard } from "@/entities/ticket/ui"; // 👍 Pass import { Issues } from "pages/issues"; import { IssueDetails } from "widgets/issue-details" import { AuthForm } from "features/auth-form" import { Button } from "shared/ui/button"; import { orderModel } from "entities/order"; import { TicketCard } from "@/entities/ticket"; import { AuthForm } from "features/auth/form" import { Button } from "shared/ui"; ``` #### Segments PublicAPI ```js // 👍 Pass /** @path features/smth/index.ts */ export { SubmitButton, SmthForm } from "./ui"; export * from "./model"; export * as smthModel from "./model"; export { selectSmthById, ... } from "./model"; // 👎 Fail /** @path features/smth/index.ts */ export { SubmitButton } from "./ui/button"; export { SmthForm } from "./ui/form"; export * from "./model/actions"; export { selectSmthById } from "./model/selectors"; ``` ## Lite **Without SegmentsAPI / InnerAPI restrictions** [(why experimental?)](https://github.com/feature-sliced/eslint-config/issues/90) Add `"@feature-sliced/eslint-config/rules/public-api/lite"` to your `extends` section in ESLint config. <sup>*Only for @^0.1.0-beta.5*</sup> #### Slices PublicAPI Without changes ```js // 👍 Pass import { orderModel } from "entities/order"; // 👎 Fail import { orderModel } from "entities/order/model"; ``` #### Segments PublicAPI Less restricted with segments ```js // 👍 Pass /** @path features/smth/index.ts */ export { SubmitButton, SmthForm } from "./ui"; export * from "./model"; export * as smthModel from "./model"; export { selectSmthById, ... } from "./model"; // 👍 Also Pass /** @path features/smth/index.ts */ export { SubmitButton } from "./ui/button"; export { SmthForm } from "./ui/form"; export * from "./model/actions"; export { selectSmthById } from "./model/selectors"; ``` --- > ⚠️ **DANGEROUS-mode**: Support custom segments at shared by `_` prefix ([why?](https://github.com/feature-sliced/eslint-config/discussions/75#discussioncomment-1972319)) > > Use carefully and at your own risk > > ```js > import { ... } from "shared/lib" // 🟩 valid > import { ... } from "shared/library" // 🟥 not valid > > import { ... } from "shared/_library" // 🟩 again valid > import { ... } from "shared/_library/fp" // 🟩 still valid > import { ... } from "shared/_library/fp/compose" // 🟥 don't be brash :) > ``` > > <sup>*Only for @^0.1.0-beta.6*</sup>