/* * Copyright 2025 coze-dev Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { findVariable } from '@typescript-eslint/utils/ast-utils'; import { ReportSuggestionArray } from '@typescript-eslint/utils/ts-eslint'; import { accessImportedIds, createRule, findCalleeNames, isSameIdentifier, } from '../utils'; const STORE_CREATE_NAME = 'create'; type Middleware = | string | { name: string; msg?: string; suggestImport?: string }; export interface Option { middlewares: Middleware[]; } export const preferMiddlewares = createRule< Option[], 'preferMiddlewares' | 'applyMiddlewares' >({ name: 'zustand/prefer-middlewares', defaultOptions: [ { middlewares: [ { name: 'devtools', msg: 'Advise using devtools middleware for convenient debugging', suggestImport: "import { devtools } from 'zustand/middleware';\n", }, ], }, ], meta: { type: 'suggestion', docs: { description: 'Create store prefer using some middlewares', }, messages: { preferMiddlewares: '{{ msgs }}', applyMiddlewares: 'Use {{ name }} middleware', }, schema: { type: 'array', }, hasSuggestions: true, }, create: accessImportedIds