public async translateAll()

in src/rosetta-translator.ts [166:221]


  public async translateAll(
    snippets: TypeScriptSnippet[],
    optionsOrAddToTablet?: boolean | TranslateAllOptions,
  ): Promise<TranslateAllResult> {
    const options =
      optionsOrAddToTablet && typeof optionsOrAddToTablet === 'object'
        ? optionsOrAddToTablet
        : { addToTablet: optionsOrAddToTablet };

    const exampleDependencies = collectDependencies(snippets);
    await expandWithTransitiveDependencies(exampleDependencies);

    let compilationDirectory;
    let cleanCompilationDir = false;
    if (options?.compilationDirectory) {
      // If the user provided a directory, we're going to trust-but-confirm.
      await validateAvailableDependencies(options.compilationDirectory, exampleDependencies);
      compilationDirectory = options.compilationDirectory;
    } else {
      compilationDirectory = await prepareDependencyDirectory(exampleDependencies);
      cleanCompilationDir = true;
    }

    const origDir = process.cwd();
    // Easiest way to get a fixed working directory (for sources) in is to chdir
    process.chdir(compilationDirectory);

    let result;
    try {
      result = await translateAll(snippets, this.includeCompilerDiagnostics);
    } finally {
      process.chdir(origDir);
      if (cleanCompilationDir) {
        if (options.cleanup ?? true) {
          await fs.rm(compilationDirectory, { force: true, recursive: true });
        } else {
          logging.info(`Leaving directory uncleaned: ${compilationDirectory}`);
        }
      }
    }

    const fingerprinted = result.translatedSnippets.map((snippet) =>
      snippet.withFingerprint(this.fingerprinter.fingerprintAll(snippet.fqnsReferenced())),
    );

    if (options?.addToTablet ?? true) {
      for (const translation of fingerprinted) {
        this.tablet.addSnippet(translation);
      }
    }

    return {
      translatedSnippets: fingerprinted,
      diagnostics: result.diagnostics,
    };
  }