knip
Version:
Find and fix unused dependencies, exports and files in your TypeScript and JavaScript projects
41 lines (40 loc) • 1.64 kB
JavaScript
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;