From edd9044568739b089f1ec66b53d0cc36d540610b Mon Sep 17 00:00:00 2001 From: Marcus Hultman Date: Fri, 23 Jun 2023 19:29:21 +0200 Subject: [PATCH] fix: don't generate transitively imported files for mapped imports (#854) --- src/plugin.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 580f6b1e2..44e4cefec 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -18,16 +18,33 @@ async function main() { const typeMap = createTypeMap(request, options); const utils = makeUtils(options); const ctx: Context = { typeMap, options, utils }; + let filesToGenerate; + + if (options.emitImportedFiles) { + const fileSet = new Set(); + const addFilesUnlessAliased = (filenames: string[]) => { + filenames + .filter((name) => !options.M[name]) + .forEach((name) => { + fileSet.add(name); + const file = request.protoFile.find((file) => file.name === name); + if (file && file.dependency.length > 0) { + addFilesUnlessAliased(file.dependency); + } + }); + }; + addFilesUnlessAliased(request.fileToGenerate); + filesToGenerate = request.protoFile.filter((file) => fileSet.has(file.name)); + } else { + filesToGenerate = protoFilesToGenerate(request).filter((file) => !options.M[file.name]); + } - const filesToGenerate = options.emitImportedFiles ? request.protoFile : protoFilesToGenerate(request); const files = await Promise.all( - filesToGenerate - .filter((file) => !options.M[file.name]) - .map(async (file) => { - const [path, code] = generateFile(ctx, file); - const content = code.toString({ ...getTsPoetOpts(options), path }); - return { name: path, content }; - }) + filesToGenerate.map(async (file) => { + const [path, code] = generateFile(ctx, file); + const content = code.toString({ ...getTsPoetOpts(options), path }); + return { name: path, content }; + }) ); if (options.outputTypeRegistry) {