mirror of
https://github.com/renovatebot/renovate.git
synced 2025-02-05 00:59:37 +00:00
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import upath from 'upath';
|
|
import { logger } from '../../../logger';
|
|
import { readLocalFile } from '../../../util/fs';
|
|
import type { ExtractConfig, PackageFile } from '../types';
|
|
import { BatectConfigSchema } from './schema';
|
|
import type { ExtractionResult } from './types';
|
|
|
|
export function extractPackageFile(
|
|
content: string,
|
|
packageFile: string,
|
|
): ExtractionResult | null {
|
|
logger.trace(`batect.extractPackageFile(${packageFile})`);
|
|
|
|
try {
|
|
const { imageDependencies, bundleDependencies, fileIncludes } =
|
|
BatectConfigSchema.parse(content);
|
|
const deps = [...imageDependencies, ...bundleDependencies];
|
|
|
|
const dirName = upath.dirname(packageFile);
|
|
const referencedConfigFiles = fileIncludes.map((file) =>
|
|
upath.join(dirName, file),
|
|
);
|
|
|
|
return { deps, referencedConfigFiles };
|
|
} catch (err) {
|
|
logger.debug(
|
|
{ err, packageFile },
|
|
'Extracting dependencies from Batect configuration file failed',
|
|
);
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export async function extractAllPackageFiles(
|
|
config: ExtractConfig,
|
|
packageFiles: string[],
|
|
): Promise<PackageFile[] | null> {
|
|
const filesToExamine = new Set<string>(packageFiles);
|
|
const filesAlreadyExamined = new Set<string>();
|
|
const results: PackageFile[] = [];
|
|
|
|
while (filesToExamine.size > 0) {
|
|
const packageFile = filesToExamine.values().next().value as string;
|
|
filesToExamine.delete(packageFile);
|
|
filesAlreadyExamined.add(packageFile);
|
|
|
|
const content = await readLocalFile(packageFile, 'utf8');
|
|
// TODO #22198
|
|
const result = extractPackageFile(content!, packageFile);
|
|
|
|
if (result !== null) {
|
|
result.referencedConfigFiles.forEach((f) => {
|
|
if (!filesAlreadyExamined.has(f) && !filesToExamine.has(f)) {
|
|
filesToExamine.add(f);
|
|
}
|
|
});
|
|
|
|
results.push({
|
|
packageFile,
|
|
deps: result.deps,
|
|
});
|
|
}
|
|
}
|
|
|
|
return results;
|
|
}
|