UNPKG

knip

Version:

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

51 lines (50 loc) 1.97 kB
import AstroMDX from './astro-mdx.js'; import Astro from './astro.js'; import MDX from './mdx.js'; import Svelte from './svelte.js'; import Vue from './vue.js'; const isAsync = (fn) => (fn ? fn.constructor.name === 'AsyncFunction' : false); const normalizeExt = (ext) => ext.replace(/^\.*/, '.'); export const partitionCompilers = (rawLocalConfig) => { const syncCompilers = {}; const asyncCompilers = {}; for (const extension in rawLocalConfig.compilers) { const ext = normalizeExt(extension); const compilerFn = rawLocalConfig.compilers[extension]; if (typeof compilerFn === 'function') { if (!rawLocalConfig.asyncCompilers?.[ext] && isAsync(compilerFn)) { asyncCompilers[ext] = compilerFn; } else { syncCompilers[ext] = compilerFn; } } } for (const extension in rawLocalConfig.asyncCompilers) { const ext = normalizeExt(extension); asyncCompilers[ext] = rawLocalConfig.asyncCompilers[extension]; } return { ...rawLocalConfig, syncCompilers, asyncCompilers }; }; const compilers = new Map([ ['.astro', Astro], ['.mdx', MDX], ['.svelte', Svelte], ['.vue', Vue], ]); export const getIncludedCompilers = (syncCompilers, asyncCompilers, dependencies) => { const hasDependency = (packageName) => dependencies.has(packageName); for (const [extension, { condition, compiler }] of compilers.entries()) { if (extension === '.mdx' && AstroMDX.condition(hasDependency)) { syncCompilers.set(extension, AstroMDX.compiler); } else if ((!syncCompilers.has(extension) && condition(hasDependency)) || syncCompilers.get(extension) === true) { syncCompilers.set(extension, compiler); } } return [syncCompilers, asyncCompilers]; }; export const getCompilerExtensions = (compilers) => [ ...compilers[0].keys(), ...compilers[1].keys(), ];