From 8ffb2625e6d2df268054f866b416d2131271a120 Mon Sep 17 00:00:00 2001 From: blessuselessk <261668912+blessuselessk@users.noreply.github.com> Date: Wed, 18 Mar 2026 14:02:55 -0600 Subject: [PATCH] fix: place SVGs in component subdirectories when using --pcb-svgs/--schematic-svgs When explicit image format flags (--pcb-svgs, --schematic-svgs, --svgs, --pngs, --3d, --pcb-only, --schematic-only) are used, generate images for all builds instead of only the preview build. This matches --glbs behavior and prevents SVGs from overwriting each other when building multiple components. Fixes tscircuit/tscircuit#2550 --- cli/build/register.ts | 2 +- tests/cli/build/build-output-flags.test.ts | 32 +++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/cli/build/register.ts b/cli/build/register.ts index b344dc54..bdc301ce 100644 --- a/cli/build/register.ts +++ b/cli/build/register.ts @@ -356,7 +356,7 @@ export const registerBuild = (program: Command) => { hasAnyImageFormatSelected(imageFormatSelection), ) const shouldGenerateAllPreviewImages = Boolean( - resolvedOptions?.allImages, + resolvedOptions?.allImages || hasExplicitImageFormatSelection, ) const shouldGeneratePreviewAssetsInWorker = Boolean( resolvedOptions?.ci && diff --git a/tests/cli/build/build-output-flags.test.ts b/tests/cli/build/build-output-flags.test.ts index 694f96f9..b97020c5 100644 --- a/tests/cli/build/build-output-flags.test.ts +++ b/tests/cli/build/build-output-flags.test.ts @@ -1,4 +1,4 @@ -import { test, expect } from "bun:test" +import { expect, test } from "bun:test" import { readFile, stat, writeFile } from "node:fs/promises" import path from "node:path" import { getCliTestFixture } from "../../fixtures/get-cli-test-fixture" @@ -155,6 +155,36 @@ test("build --pcb-only generates only pcb.svg", async () => { ).rejects.toBeTruthy() }, 30_000) +test("build --pcb-svgs --schematic-svgs places SVGs in each component subdirectory", async () => { + const { tmpDir, runCommand } = await getCliTestFixture() + const firstCircuit = path.join(tmpDir, "first.circuit.tsx") + const secondCircuit = path.join(tmpDir, "second.circuit.tsx") + await writeFile(firstCircuit, circuitCode) + await writeFile(secondCircuit, circuitCode) + await writeFile(path.join(tmpDir, "package.json"), "{}") + + await runCommand(`tsci build --pcb-svgs --schematic-svgs`) + + // SVGs should be in each component's subdirectory + for (const name of ["first", "second"]) { + const pcbSvg = await readFile( + path.join(tmpDir, "dist", name, "pcb.svg"), + "utf-8", + ) + expect(pcbSvg).toContain(" { const { tmpDir, runCommand } = await getCliTestFixture() const circuitPath = path.join(tmpDir, "preview.circuit.tsx")