in eng/tools/typespec-migration-validation/src/helper.ts [56:116]
export function mergeFiles(folderPath: string): OpenAPI2Document {
const files = readFilesFromDirectory(folderPath, 'example');
const mergedContent: OpenAPI2Document = { swagger: '2.0', info: { title: "placeholder", version: "placeholder" }, paths: {} };
for (const file of files) {
const fileContent = readFileContent(file);
const jsonContent: OpenAPI2Document = JSON.parse(fileContent);
mergedContent.info = jsonContent.info;
for (const consumer of jsonContent.consumes ?? []) {
if (!mergedContent.consumes) {
mergedContent.consumes = [];
}
if (!mergedContent.consumes.includes(consumer)) {
mergedContent.consumes.push(consumer);
}
}
for (const producer of jsonContent.produces ?? []) {
if (!mergedContent.produces) {
mergedContent.produces = [];
}
if (!mergedContent.produces.includes(producer)) {
mergedContent.produces.push(producer);
}
}
for (const pathKey in jsonContent.paths) {
const pathValue = jsonContent.paths[pathKey];
if (!mergedContent.paths[pathKey]) {
mergedContent.paths[pathKey] = pathValue!;
} else {
// Merge the paths if they already exist
mergedContent.paths[pathKey] = { ...mergedContent.paths[pathKey], ...pathValue };
}
}
for (const parameterKey in jsonContent.parameters) {
if (!mergedContent.parameters) {
mergedContent.parameters = {};
}
if (!mergedContent.parameters[parameterKey]) {
mergedContent.parameters[parameterKey] = jsonContent.parameters[parameterKey]!;
} else {
logWarning(`Duplicate parameter key found: ${parameterKey}. Keeping the first one.`);
}
}
for (const definitionKey in jsonContent.definitions) {
if (!mergedContent.definitions) {
mergedContent.definitions = {};
}
if (!mergedContent.definitions[definitionKey]) {
mergedContent.definitions[definitionKey] = jsonContent.definitions[definitionKey]!;
} else {
logWarning(`Duplicate definition key found: ${definitionKey}. Keeping the first one.`);
}
}
}
return mergedContent;
}