eslint-plugin-mocha
Version:
Eslint rules for mocha.
51 lines • 1.88 kB
JavaScript
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