UNPKG

eslint-plugin-mocha

Version:

Eslint rules for mocha.

51 lines 1.88 kB
import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { isRecord } from "./record.js"; function parsePackageMetadata(packageJsonPath, packageJson) { if (isRecord(packageJson) && typeof packageJson.name === 'string' && typeof packageJson.version === 'string') { return { name: packageJson.name, version: packageJson.version }; } throw new Error(`Missing package name or version in ${packageJsonPath}`); } function determineParentFolder(currentFolder) { const parentFolder = path.dirname(currentFolder); if (parentFolder === currentFolder) { throw new Error(`Failed to find package.json for ${currentFolder}`); } return parentFolder; } function isEnoentError(error) { return isRecord(error) && error.code === 'ENOENT'; } async function readPackageMetadata(packageJsonPath, dependencies) { try { await dependencies.accessFile(packageJsonPath); } catch (error) { if (isEnoentError(error)) { return undefined; } throw error; } const packageJson = await dependencies.readPackageJson(packageJsonPath); return parsePackageMetadata(packageJsonPath, packageJson); } export function createPackageMetadataReader(dependencies) { return async function readClosestPackageMetadata(currentModuleUrl) { let currentFolder = path.dirname(fileURLToPath(currentModuleUrl)); for (;;) { const packageJsonPath = path.join(currentFolder, 'package.json'); const packageMetadata = await readPackageMetadata(packageJsonPath, dependencies); if (packageMetadata !== undefined) { return packageMetadata; } currentFolder = determineParentFolder(currentFolder); } }; } //# sourceMappingURL=package-metadata-reader.js.map