91 lines
2.1 KiB
JavaScript
91 lines
2.1 KiB
JavaScript
import path from 'node:path';
|
|
import fs from 'node:fs/promises';
|
|
import { findDepPkgJsonPath } from 'vitefu';
|
|
|
|
/**
|
|
* @typedef {{
|
|
* dir: string;
|
|
* pkg: Record<string, any>;
|
|
* }} DependencyData
|
|
*/
|
|
|
|
/**
|
|
* @param {string} dep
|
|
* @param {string} parent
|
|
* @returns {Promise<DependencyData | undefined>}
|
|
*/
|
|
export async function resolveDependencyData(dep, parent) {
|
|
const depDataPath = await findDepPkgJsonPath(dep, parent);
|
|
if (!depDataPath) return undefined;
|
|
try {
|
|
return {
|
|
dir: path.dirname(depDataPath),
|
|
pkg: JSON.parse(await fs.readFile(depDataPath, 'utf-8'))
|
|
};
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
const COMMON_DEPENDENCIES_WITHOUT_SVELTE_FIELD = [
|
|
'@lukeed/uuid',
|
|
'@playwright/test',
|
|
'@sveltejs/kit',
|
|
'@sveltejs/package',
|
|
'@sveltejs/vite-plugin-svelte',
|
|
'autoprefixer',
|
|
'cookie',
|
|
'dotenv',
|
|
'esbuild',
|
|
'eslint',
|
|
'jest',
|
|
'mdsvex',
|
|
'playwright',
|
|
'postcss',
|
|
'prettier',
|
|
'svelte',
|
|
'svelte2tsx',
|
|
'svelte-check',
|
|
'svelte-hmr',
|
|
'svelte-preprocess',
|
|
'tslib',
|
|
'typescript',
|
|
'vite',
|
|
'vitest',
|
|
'__vite-browser-external' // see https://github.com/sveltejs/vite-plugin-svelte/issues/362
|
|
];
|
|
const COMMON_PREFIXES_WITHOUT_SVELTE_FIELD = [
|
|
'@fontsource/',
|
|
'@postcss-plugins/',
|
|
'@rollup/',
|
|
'@sveltejs/adapter-',
|
|
'@types/',
|
|
'@typescript-eslint/',
|
|
'eslint-',
|
|
'jest-',
|
|
'postcss-plugin-',
|
|
'prettier-plugin-',
|
|
'rollup-plugin-',
|
|
'vite-plugin-'
|
|
];
|
|
|
|
/**
|
|
* Test for common dependency names that tell us it is not a package including a svelte field, eg. eslint + plugins.
|
|
*
|
|
* This speeds up the find process as we don't have to try and require the package.json for all of them
|
|
*
|
|
* @param {string} dependency
|
|
* @returns {boolean} true if it is a dependency without a svelte field
|
|
*/
|
|
export function isCommonDepWithoutSvelteField(dependency) {
|
|
return (
|
|
COMMON_DEPENDENCIES_WITHOUT_SVELTE_FIELD.includes(dependency) ||
|
|
COMMON_PREFIXES_WITHOUT_SVELTE_FIELD.some(
|
|
(prefix) =>
|
|
prefix.startsWith('@')
|
|
? dependency.startsWith(prefix)
|
|
: dependency.substring(dependency.lastIndexOf('/') + 1).startsWith(prefix) // check prefix omitting @scope/
|
|
)
|
|
);
|
|
}
|