@krymskyimaksym/eslint-plugin-react-api-client
v0.2.1
Published
ESLint rules for @krymskyimaksym/react-api-client
Maintainers
Readme
@krymskyimaksym/eslint-plugin-react-api-client
ESLint-правила для @krymskyimaksym/react-api-client (требуется ^2.0.0).
Установка
# npm
npm install -D @krymskyimaksym/eslint-plugin-react-api-client
# yarn
yarn add -D @krymskyimaksym/eslint-plugin-react-api-client
# pnpm
pnpm add -D @krymskyimaksym/eslint-plugin-react-api-client
# bun
bun add -d @krymskyimaksym/eslint-plugin-react-api-clientPeer-зависимости: eslint >= 8. @typescript-eslint/utils
устанавливается транзитивно (входит в dependencies плагина).
Подключение
// .eslintrc.js
module.exports = {
plugins: ['@krymskyimaksym/react-api-client'],
extends: ['plugin:@krymskyimaksym/react-api-client/recommended'],
};Или вручную:
{
rules: {
'@krymskyimaksym/react-api-client/no-await-mutate': 'error',
'@krymskyimaksym/react-api-client/require-query-key-when-endpoint-is-fn': 'warn',
}
}Правила (recommended)
| Rule | Severity | Autofix |
|---|---|---|
| no-await-mutate | error | ✓ |
| no-non-serializable-params | error | — |
| require-query-key-when-endpoint-is-fn | warn | — |
Описание
no-await-mutate (error, autofix)
mutate(...) возвращает void. await api.mutate(...) отдаст
undefined и не поймает ошибки в try/catch. Для последовательной
логики или try/catch используй mutateAsync.
// ❌
await api.mutate({ id: 1 });
// ✅
await api.mutateAsync({ id: 1 });Autofix меняет .mutate на .mutateAsync.
require-query-key-when-endpoint-is-fn (warn)
Если apiClient/apiPaginate создан с endpoint-функцией, и хук
вызывается без явного queryKey в опциях — предупреждение.
// ❌
const userApi = apiClient((p) => `/users/${p.id}`);
userApi.useFetch({ id: 1 });
// ✅
userApi.useFetch({ id: 1 }, { queryKey: ['user', 1] });При endpoint-функции стабильность ключа зависит от того, что функция
возвращает одну и ту же строку для одних и тех же params. Явный
queryKey снимает риск.
no-non-serializable-params (error)
Запрещает функции и Symbol в объекте params. Они сломают
hashQueryKey в рантайме (throw при первом mount):
// ❌
api.useFetch({ id: 1, cb: () => 1 });
api.useFetch({ tag: Symbol('x') });
// ✅
api.useFetch({ id: 1 });License
MIT
