dify
This commit is contained in:
288
dify/web/knip.config.ts
Normal file
288
dify/web/knip.config.ts
Normal file
@@ -0,0 +1,288 @@
|
||||
import type { KnipConfig } from 'knip'
|
||||
|
||||
/**
|
||||
* Knip Configuration for Dead Code Detection
|
||||
*
|
||||
* This configuration helps identify unused files, exports, and dependencies
|
||||
* in the Dify web application (Next.js 15 + TypeScript + React 19).
|
||||
*
|
||||
* ⚠️ SAFETY FIRST: This configuration is designed to be conservative and
|
||||
* avoid false positives that could lead to deleting actively used code.
|
||||
*
|
||||
* @see https://knip.dev/reference/configuration
|
||||
*/
|
||||
const config: KnipConfig = {
|
||||
// ============================================================================
|
||||
// Next.js Framework Configuration
|
||||
// ============================================================================
|
||||
// Configure entry points specific to Next.js application structure.
|
||||
// These files are automatically treated as entry points by the framework.
|
||||
next: {
|
||||
entry: [
|
||||
// Next.js App Router pages (must exist for routing)
|
||||
'app/**/page.tsx',
|
||||
'app/**/layout.tsx',
|
||||
'app/**/loading.tsx',
|
||||
'app/**/error.tsx',
|
||||
'app/**/not-found.tsx',
|
||||
'app/**/template.tsx',
|
||||
'app/**/default.tsx',
|
||||
|
||||
// Middleware (runs before every route)
|
||||
'middleware.ts',
|
||||
|
||||
// Configuration files
|
||||
'next.config.js',
|
||||
'tailwind.config.js',
|
||||
'tailwind-common-config.ts',
|
||||
'postcss.config.js',
|
||||
|
||||
// Testing configuration
|
||||
'jest.config.ts',
|
||||
'jest.setup.ts',
|
||||
|
||||
// Linting configuration
|
||||
'eslint.config.mjs',
|
||||
],
|
||||
},
|
||||
|
||||
// ============================================================================
|
||||
// Global Entry Points
|
||||
// ============================================================================
|
||||
// Files that serve as entry points for the application.
|
||||
// The '!' suffix means these patterns take precedence and are always included.
|
||||
entry: [
|
||||
// Next.js App Router patterns (high priority)
|
||||
'app/**/page.tsx!',
|
||||
'app/**/layout.tsx!',
|
||||
'app/**/loading.tsx!',
|
||||
'app/**/error.tsx!',
|
||||
'app/**/not-found.tsx!',
|
||||
'app/**/template.tsx!',
|
||||
'app/**/default.tsx!',
|
||||
|
||||
// Core configuration files
|
||||
'middleware.ts!',
|
||||
'next.config.js!',
|
||||
'tailwind.config.js!',
|
||||
'tailwind-common-config.ts!',
|
||||
'postcss.config.js!',
|
||||
|
||||
// Testing setup
|
||||
'jest.config.ts!',
|
||||
'jest.setup.ts!',
|
||||
|
||||
// Linting setup
|
||||
'eslint.config.mjs!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Global Initializers and Providers
|
||||
// ========================================================================
|
||||
// These files are imported by root layout.tsx and provide global functionality.
|
||||
// Even if not directly imported elsewhere, they are essential for app initialization.
|
||||
|
||||
// Browser initialization (runs on client startup)
|
||||
'app/components/browser-initializer.tsx!',
|
||||
'app/components/sentry-initializer.tsx!',
|
||||
'app/components/swr-initializer.tsx!',
|
||||
|
||||
// i18n initialization (server and client)
|
||||
'app/components/i18n.tsx!',
|
||||
'app/components/i18n-server.tsx!',
|
||||
|
||||
// Route prefix handling (used in root layout)
|
||||
'app/routePrefixHandle.tsx!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Context Providers
|
||||
// ========================================================================
|
||||
// Context providers might be used via React Context API and imported dynamically.
|
||||
// Protecting all context files to prevent breaking the provider chain.
|
||||
'context/**/*.ts?(x)!',
|
||||
|
||||
// Component-level contexts (also used via React.useContext)
|
||||
'app/components/**/*.context.ts?(x)!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: State Management Stores
|
||||
// ========================================================================
|
||||
// Zustand stores might be imported dynamically or via hooks.
|
||||
// These are often imported at module level, so they should be protected.
|
||||
'app/components/**/*.store.ts?(x)!',
|
||||
'context/**/*.store.ts?(x)!',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Provider Components
|
||||
// ========================================================================
|
||||
// Provider components wrap the app and provide global state/functionality
|
||||
'app/components/**/*.provider.ts?(x)!',
|
||||
'context/**/*.provider.ts?(x)!',
|
||||
|
||||
// ========================================================================
|
||||
// Development tools
|
||||
// ========================================================================
|
||||
// Storybook configuration
|
||||
'.storybook/**/*',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Project Files to Analyze
|
||||
// ============================================================================
|
||||
// Glob patterns for files that should be analyzed for unused code.
|
||||
// Excludes test files to avoid false positives.
|
||||
project: [
|
||||
'**/*.{js,jsx,ts,tsx,mjs,cjs}',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Ignored Files and Directories
|
||||
// ============================================================================
|
||||
// Files and directories that should be completely excluded from analysis.
|
||||
// These typically contain:
|
||||
// - Test files
|
||||
// - Internationalization files (loaded dynamically)
|
||||
// - Static assets
|
||||
// - Build outputs
|
||||
// - External libraries
|
||||
ignore: [
|
||||
// Test files and directories
|
||||
'**/__tests__/**',
|
||||
'**/*.spec.{ts,tsx}',
|
||||
'**/*.test.{ts,tsx}',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: i18n Files (Dynamically Loaded)
|
||||
// ========================================================================
|
||||
// Internationalization files are loaded dynamically at runtime via i18next.
|
||||
// Pattern: import(`@/i18n/${locale}/messages`)
|
||||
// These will NEVER show up in static analysis but are essential!
|
||||
'i18n/**',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 CRITICAL: Static Assets
|
||||
// ========================================================================
|
||||
// Static assets are referenced by URL in the browser, not via imports.
|
||||
// Examples: /logo.png, /icons/*, /embed.js
|
||||
'public/**',
|
||||
|
||||
// Build outputs and caches
|
||||
'node_modules/**',
|
||||
'.next/**',
|
||||
'coverage/**',
|
||||
|
||||
// Development tools
|
||||
'**/*.stories.{ts,tsx}',
|
||||
|
||||
// ========================================================================
|
||||
// 🔒 Utility scripts (not part of application runtime)
|
||||
// ========================================================================
|
||||
// These scripts are run manually (e.g., pnpm gen-icons, pnpm check-i18n)
|
||||
// and are not imported by the application code.
|
||||
'scripts/**',
|
||||
'bin/**',
|
||||
'i18n-config/**',
|
||||
|
||||
// Icon generation script (generates components, not used in runtime)
|
||||
'app/components/base/icons/script.mjs',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Ignored Dependencies
|
||||
// ============================================================================
|
||||
// Dependencies that are used but not directly imported in code.
|
||||
// These are typically:
|
||||
// - Build tools
|
||||
// - Plugins loaded by configuration files
|
||||
// - CLI tools
|
||||
ignoreDependencies: [
|
||||
// ========================================================================
|
||||
// Next.js plugins (loaded by next.config.js)
|
||||
// ========================================================================
|
||||
'next-pwa',
|
||||
'@next/bundle-analyzer',
|
||||
'@next/mdx',
|
||||
|
||||
// ========================================================================
|
||||
// Build tools (used by webpack/next.js build process)
|
||||
// ========================================================================
|
||||
'code-inspector-plugin',
|
||||
|
||||
// ========================================================================
|
||||
// Development and translation tools (used by scripts)
|
||||
// ========================================================================
|
||||
'bing-translate-api',
|
||||
'uglify-js',
|
||||
'magicast',
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Export Analysis Configuration
|
||||
// ============================================================================
|
||||
// Configure how exports are analyzed
|
||||
|
||||
// Ignore exports that are only used within the same file
|
||||
// (e.g., helper functions used internally in the same module)
|
||||
ignoreExportsUsedInFile: true,
|
||||
|
||||
// ⚠️ SAFETY: Include exports from entry files in the analysis
|
||||
// This helps find unused public APIs, but be careful with:
|
||||
// - Context exports (useContext hooks)
|
||||
// - Store exports (useStore hooks)
|
||||
// - Type exports (might be used in other files)
|
||||
includeEntryExports: true,
|
||||
|
||||
// ============================================================================
|
||||
// Ignored Binaries
|
||||
// ============================================================================
|
||||
// Binary executables that are used but not listed in package.json
|
||||
ignoreBinaries: [
|
||||
'only-allow', // Used in preinstall script to enforce pnpm usage
|
||||
],
|
||||
|
||||
// ============================================================================
|
||||
// Reporting Rules
|
||||
// ============================================================================
|
||||
// Configure what types of issues to report and at what severity level
|
||||
rules: {
|
||||
// ========================================================================
|
||||
// Unused files are ERRORS
|
||||
// ========================================================================
|
||||
// These should definitely be removed or used.
|
||||
// However, always manually verify before deleting!
|
||||
files: 'error',
|
||||
|
||||
// ========================================================================
|
||||
// Unused dependencies are WARNINGS
|
||||
// ========================================================================
|
||||
// Dependencies might be:
|
||||
// - Used in production builds but not in dev
|
||||
// - Peer dependencies
|
||||
// - Used by other tools
|
||||
dependencies: 'warn',
|
||||
devDependencies: 'warn',
|
||||
|
||||
// ========================================================================
|
||||
// Unlisted imports are ERRORS
|
||||
// ========================================================================
|
||||
// Missing from package.json - will break in production!
|
||||
unlisted: 'error',
|
||||
|
||||
// ========================================================================
|
||||
// Unused exports are WARNINGS (not errors!)
|
||||
// ========================================================================
|
||||
// Exports might be:
|
||||
// - Part of public API for future use
|
||||
// - Used by external tools
|
||||
// - Exported for type inference
|
||||
// ⚠️ ALWAYS manually verify before removing exports!
|
||||
exports: 'warn',
|
||||
|
||||
// Unused types are warnings (might be part of type definitions)
|
||||
types: 'warn',
|
||||
|
||||
// Duplicate exports are warnings (could cause confusion but not breaking)
|
||||
duplicates: 'warn',
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
||||
Reference in New Issue
Block a user