export function mergeFiles()

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;
}