| 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/ | |
| ) | |
| ); | |
| } | |