renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
79 lines (78 loc) • 2.83 kB
JavaScript
import { GlobalConfig } from "../../../config/global.js";
import { logger } from "../../../logger/index.js";
import { parseJson } from "../../../util/common.js";
import { ensureLocalPath } from "../../../util/fs/util.js";
import { getSiblingFileName, readLocalFile } from "../../../util/fs/index.js";
import { extractPackageJson } from "../npm/extract/common/package-file.js";
import { isNonEmptyArray } from "@sindresorhus/is";
import upath from "upath";
import { findPackages } from "find-packages";
//#region lib/modules/manager/deno/compat.ts
async function extractDenoCompatiblePackageJson(packageFile) {
const packageFileContent = await readLocalFile(packageFile, "utf8");
if (!packageFileContent) {
logger.debug({ packageFile }, "Deno: No package.json found");
return null;
}
let packageJson;
try {
packageJson = parseJson(packageFileContent, packageFile);
} catch (err) {
logger.error({
err,
packageFile
}, "Error parsing package.json");
return null;
}
const extracted = extractPackageJson(packageJson, packageFile);
if (!extracted) return null;
const result = extracted;
result.managerData = {
packageName: extracted.managerData?.packageJsonName,
workspaces: extracted.managerData?.workspaces
};
result.packageFile = packageFile;
return result;
}
async function detectNodeCompatWorkspaces({ managerData, packageFile }) {
logger.debug(`Detecting deno's node compat Workspaces`);
let filters;
if (isNonEmptyArray(managerData?.workspaces)) filters = managerData?.workspaces;
const localDir = GlobalConfig.get("localDir");
const packagePaths = (await findPackages(upath.dirname(ensureLocalPath(packageFile)), {
patterns: filters,
ignore: ["**/node_modules/**", "**/bower_components/**"]
})).map((pkg) => {
const pkgPath = upath.join(pkg.dir, "package.json");
return upath.relative(localDir, pkgPath);
});
return {
workspaces: filters,
packagePaths
};
}
async function collectPackageJson(lockFile) {
const lockFiles = [lockFile];
const packageFiles = [];
const rootPackageFile = await extractDenoCompatiblePackageJson(getSiblingFileName(lockFile, "package.json"));
if (rootPackageFile) {
rootPackageFile.lockFiles = lockFiles;
const { workspaces, packagePaths } = await detectNodeCompatWorkspaces(rootPackageFile);
rootPackageFile.managerData = {
packageName: rootPackageFile.managerData?.packageName,
workspaces
};
packageFiles.push(rootPackageFile);
for (const packagePath of packagePaths) {
const packageFile = await extractDenoCompatiblePackageJson(packagePath);
if (packageFile) {
packageFile.lockFiles = lockFiles;
packageFiles.push(packageFile);
}
}
}
return packageFiles;
}
//#endregion
export { collectPackageJson, detectNodeCompatWorkspaces, extractDenoCompatiblePackageJson };
//# sourceMappingURL=compat.js.map