UNPKG

knip

Version:

Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects

41 lines (40 loc) 1.64 kB
import { toProductionEntry } from "../../util/input.js"; import { hasDependency } from "../../util/plugin.js"; import { getPageExtensions } from "./resolveFromAST.js"; const title = 'Next.js'; const enablers = ['next']; const isEnabled = ({ dependencies }) => hasDependency(dependencies, enablers); const config = ['next.config.{js,ts,cjs,mjs}']; const defaultPageExtensions = ['{js,jsx,ts,tsx}']; const productionEntryFilePatterns = [ 'app/{,[(]*[)]/}{manifest,robots}.{js,ts}', 'app/**/sitemap.{js,ts}', 'app/**/{icon,apple-icon,opengraph-image,twitter-image}.{js,jsx,ts,tsx}', ]; const getEntryFilePatterns = (pageExtensions = defaultPageExtensions) => { const ext = pageExtensions.length === 1 ? pageExtensions[0] : `{${pageExtensions.join(',')}}`; return [ ...productionEntryFilePatterns, `{instrumentation,instrumentation-client,middleware,proxy}.${ext}`, `app/global-{error,not-found}.${ext}`, `app/**/{default,error,forbidden,loading,not-found,unauthorized}.${ext}`, `app/**/{layout,page,route,template}.${ext}`, `pages/**/*.${ext}`, ].flatMap(pattern => [pattern, `src/${pattern}`]); }; const production = getEntryFilePatterns(); const resolveFromAST = program => { const pageExtensions = getPageExtensions(program); const extensions = pageExtensions.length > 0 ? pageExtensions : defaultPageExtensions; const patterns = getEntryFilePatterns(extensions); return patterns.map(id => toProductionEntry(id)); }; const plugin = { title, enablers, isEnabled, config, production, resolveFromAST, }; export default plugin;