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