@riddance/env
Version:
Too much code slows you down, creates risks, increases maintainability burdens, confuses AI. So let's commit less of it.
32 lines • 4.97 kB
JavaScript
import { readFile } from 'node:fs/promises';
import { findPackageJSON } from 'node:module';
import { dirname, join } from 'node:path';
import { pathToFileURL } from 'node:url';
export async function dependantPackages(path) {
const { dependencies, devDependencies } = JSON.parse(await readFile(join(path, 'package.json'), 'utf-8'));
return {
dependencies: await readPackageJsonFiles(path, dependencies),
devDependencies: await readPackageJsonFiles(path, devDependencies),
};
}
async function readPackageJsonFiles(path, dependencies) {
if (!dependencies) {
return {};
}
const baseUrl = `${pathToFileURL(path).href}/`;
const packages = await Promise.all(Object.keys(dependencies).map(async (dependency) => {
const packageJson = findPackageJSON(dependency, baseUrl);
if (!packageJson) {
return undefined;
}
return [
dependency,
{
path: dirname(packageJson),
packageJson: JSON.parse(await readFile(packageJson, 'utf-8')),
},
];
}));
return Object.fromEntries(packages.filter(p => !!p));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwZW5kZW5jaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFeEMsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxJQUFZO0lBQ2hELE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDaEQsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FJdEQsQ0FBQTtJQUNELE9BQU87UUFDSCxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQzVELGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUM7S0FDckUsQ0FBQTtBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsb0JBQW9CLENBQUMsSUFBWSxFQUFFLFlBQXVDO0lBQ3JGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsQ0FBQTtJQUNiLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQTtJQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsRUFBRTtRQUM3QyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3hELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNmLE9BQU8sU0FBUyxDQUFBO1FBQ3BCLENBQUM7UUFDRCxPQUFPO1lBQ0gsVUFBVTtZQUNWO2dCQUNJLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO2dCQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQVk7YUFDM0U7U0FDSyxDQUFBO0lBQ2QsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtJQUNELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IGZpbmRQYWNrYWdlSlNPTiB9IGZyb20gJ25vZGU6bW9kdWxlJ1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGVuZGFudFBhY2thZ2VzKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHsgZGVwZW5kZW5jaWVzLCBkZXZEZXBlbmRlbmNpZXMgfSA9IEpTT04ucGFyc2UoXG4gICAgICAgIGF3YWl0IHJlYWRGaWxlKGpvaW4ocGF0aCwgJ3BhY2thZ2UuanNvbicpLCAndXRmLTgnKSxcbiAgICApIGFzIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzPzogeyBbcDogc3RyaW5nXTogeyBwYXRoOiBzdHJpbmc7IHBhY2thZ2VKc29uOiB1bmtub3duIH0gfVxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM/OiB7IFtwOiBzdHJpbmddOiB7IHBhdGg6IHN0cmluZzsgcGFja2FnZUpzb246IHVua25vd24gfSB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGRlcGVuZGVuY2llczogYXdhaXQgcmVhZFBhY2thZ2VKc29uRmlsZXMocGF0aCwgZGVwZW5kZW5jaWVzKSxcbiAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiBhd2FpdCByZWFkUGFja2FnZUpzb25GaWxlcyhwYXRoLCBkZXZEZXBlbmRlbmNpZXMpLFxuICAgIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFBhY2thZ2VKc29uRmlsZXMocGF0aDogc3RyaW5nLCBkZXBlbmRlbmNpZXM/OiB7IFtwOiBzdHJpbmddOiB1bmtub3duIH0pIHtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG4gICAgY29uc3QgYmFzZVVybCA9IGAke3BhdGhUb0ZpbGVVUkwocGF0aCkuaHJlZn0vYFxuICAgIGNvbnN0IHBhY2thZ2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIE9iamVjdC5rZXlzKGRlcGVuZGVuY2llcykubWFwKGFzeW5jIGRlcGVuZGVuY3kgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBmaW5kUGFja2FnZUpTT04oZGVwZW5kZW5jeSwgYmFzZVVybClcbiAgICAgICAgICAgIGlmICghcGFja2FnZUpzb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGRlcGVuZGVuY3ksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBkaXJuYW1lKHBhY2thZ2VKc29uKSxcbiAgICAgICAgICAgICAgICAgICAgcGFja2FnZUpzb246IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb24sICd1dGYtOCcpKSBhcyB1bmtub3duLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdIGFzIGNvbnN0XG4gICAgICAgIH0pLFxuICAgIClcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHBhY2thZ2VzLmZpbHRlcihwID0+ICEhcCkpXG59XG4iXX0=