From 6049e6fbabef7668781f1422853e92e7fc279cfc Mon Sep 17 00:00:00 2001 From: mohan-bee Date: Thu, 14 May 2026 18:53:04 +0530 Subject: [PATCH 1/2] fix --- bun.lock | 8 +++--- cli/build/generate-kicad-project.ts | 41 +++++++++++------------------ package.json | 4 +-- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/bun.lock b/bun.lock index 347365ffb..48a33050e 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ "circuit-json": "^0.0.425", "circuit-json-to-bom-csv": "^0.0.7", "circuit-json-to-gerber": "^0.0.51", - "circuit-json-to-kicad": "^0.0.125", + "circuit-json-to-kicad": "0.0.137", "circuit-json-to-pnp-csv": "^0.0.7", "circuit-json-to-readable-netlist": "^0.0.15", "circuit-json-to-spice": "^0.0.10", @@ -56,7 +56,7 @@ "jwt-decode": "^4.0.0", "kicad-component-converter": "^0.1.40", "kicad-to-circuit-json": "^0.0.59", - "kicadts": "^0.0.24", + "kicadts": "^0.0.35", "kleur": "^4.1.5", "ky": "^1.7.4", "make-vfs": "^1.0.15", @@ -478,7 +478,7 @@ "circuit-json-to-gltf": ["circuit-json-to-gltf@0.0.100", "", { "dependencies": { "@jscad/modeling": "^2.12.6", "earcut": "^3.0.2", "jscad-electronics": "^0.0.129", "jscad-to-gltf": "^0.0.5", "occt-import-js": "^0.0.23" }, "peerDependencies": { "@resvg/resvg-js": "2", "@resvg/resvg-wasm": "2", "@tscircuit/circuit-json-util": "*", "circuit-json": "*", "circuit-to-svg": "*", "typescript": "^5" }, "optionalPeers": ["@resvg/resvg-js", "@resvg/resvg-wasm"] }, "sha512-exyLOQOONmAp7xrahPb811a/kHIWconlG6pTbnFxh4xYD9wZaNP4MU3Shfs79aVa8IDQ1nKI5ilfrZ8CrzUcEA=="], - "circuit-json-to-kicad": ["circuit-json-to-kicad@0.0.125", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-WN/DcclxV1/of0HrqS8Xf2prtzUPNSP3U4w69waD5THMqDXzNBtMd0RWwbBdX1nrAuTqN+4cQfA1d9KUbohJMw=="], + "circuit-json-to-kicad": ["circuit-json-to-kicad@0.0.137", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-2iahAGFpdsUvTXFpXwmi6Sh+4ieGI+qqdTYwXlXzGi8vOaam/+oDcL5ccRJwg411rPQp6/1PwHTbiJM7oyEgDQ=="], "circuit-json-to-pnp-csv": ["circuit-json-to-pnp-csv@0.0.7", "", { "dependencies": { "papaparse": "^5.4.1" }, "peerDependencies": { "@tscircuit/soup-util": "*", "typescript": "^5.0.0" } }, "sha512-WAdNRHtaPhQM8X5NN/43WMBKDCEKQSLShg/mHIZxMUzJviymnfbq6rJj/2WvDqm/bogey34PyTEHwF3mC7zxlQ=="], @@ -784,7 +784,7 @@ "kicad-to-circuit-json": ["kicad-to-circuit-json@0.0.59", "", { "dependencies": { "schematic-symbols": "^0.0.202" }, "peerDependencies": { "typescript": "^5" } }, "sha512-g76HhVtIwRqgSYpGDQAwVLNGJPBDaPagj4fRVi6dbcHVnwPMQH5IuyBEzpth0UOHRSLS/gUCBfd1tiYWjRyq8Q=="], - "kicadts": ["kicadts@0.0.24", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-1lFoBuVNIIf0/900fwMe5fq6jdObox0TOeRbqRhPDQRY5AyIakDEgenxcCObCrVcF6EOMJrJVWK+7zA2kA1MxQ=="], + "kicadts": ["kicadts@0.0.35", "", { "peerDependencies": { "typescript": "^5" } }, "sha512-u86l0kLs1pMazriSLX1rINtBju1diGQFcHiFpGh9c+8ItqgTgobs1OafstCQ/Xbp0l3La34Oz4Oe6Ho5Vdo+Ag=="], "kind-of": ["kind-of@3.2.2", "", { "dependencies": { "is-buffer": "^1.1.5" } }, "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ=="], diff --git a/cli/build/generate-kicad-project.ts b/cli/build/generate-kicad-project.ts index 6ce290d40..f157183a7 100644 --- a/cli/build/generate-kicad-project.ts +++ b/cli/build/generate-kicad-project.ts @@ -3,6 +3,7 @@ import path from "node:path" import { CircuitJsonToKicadPcbConverter, CircuitJsonToKicadSchConverter, + resolveAndLoadKicad3dModelFiles, } from "circuit-json-to-kicad" import type { AnyCircuitElement } from "circuit-json" @@ -85,32 +86,20 @@ export const generateKicadProject = async ({ fs.writeFileSync(path.join(outputDir, boardFileName), pcbContent) fs.writeFileSync(path.join(outputDir, projectFileName), proContent) - // Download and write 3D model files - const platformFetch = globalThis.fetch - for (const modelPath of pcbConverter.getModel3dSourcePaths()) { - const fileName = path.basename(modelPath) - const isRemote = - modelPath.startsWith("http://") || modelPath.startsWith("https://") - const shapesDir = isRemote - ? "tscircuit_builtin.3dshapes" - : `${sanitizedProjectName}.3dshapes` - const destDir = path.join(outputDir, `3dmodels/${shapesDir}`) - fs.mkdirSync(destDir, { recursive: true }) - - if (isRemote) { - try { - const response = await platformFetch(modelPath) - if (response.ok) { - const buffer = Buffer.from(await response.arrayBuffer()) - fs.writeFileSync(path.join(destDir, fileName), buffer) - } - } catch (error) { - console.warn(`Failed to fetch 3D model from ${modelPath}`) - } - } else if (fs.existsSync(modelPath)) { - fs.copyFileSync(modelPath, path.join(destDir, fileName)) - } - } + await resolveAndLoadKicad3dModelFiles({ + model3dSourcePaths: pcbConverter.getModel3dSourcePaths(), + projectName: sanitizedProjectName, + fetch: (modelPath) => globalThis.fetch(modelPath), + readFile: (modelPath) => fs.promises.readFile(modelPath), + onModelFile: ({ outputPath, content }) => { + const outputFilePath = path.join(outputDir, outputPath) + fs.mkdirSync(path.dirname(outputFilePath), { recursive: true }) + fs.writeFileSync(outputFilePath, content) + }, + onError: ({ sourcePath }) => { + console.warn(`Failed to load 3D model from ${sourcePath}`) + }, + }) } return { diff --git a/package.json b/package.json index 32b496c04..40fbee3d8 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "circuit-json": "^0.0.425", "circuit-json-to-bom-csv": "^0.0.7", "circuit-json-to-gerber": "^0.0.51", - "circuit-json-to-kicad": "^0.0.125", + "circuit-json-to-kicad": "0.0.137", "circuit-json-to-pnp-csv": "^0.0.7", "circuit-json-to-readable-netlist": "^0.0.15", "circuit-json-to-spice": "^0.0.10", @@ -58,7 +58,7 @@ "jwt-decode": "^4.0.0", "kicad-component-converter": "^0.1.40", "kicad-to-circuit-json": "^0.0.59", - "kicadts": "^0.0.24", + "kicadts": "^0.0.35", "kleur": "^4.1.5", "ky": "^1.7.4", "make-vfs": "^1.0.15", From 5f22ed02ee2eeecfbcc92aad018e1b873639dd80 Mon Sep 17 00:00:00 2001 From: mohan-bee Date: Fri, 15 May 2026 19:36:09 +0530 Subject: [PATCH 2/2] up --- cli/build/generate-kicad-project.ts | 5 ++++- cli/build/register.ts | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cli/build/generate-kicad-project.ts b/cli/build/generate-kicad-project.ts index f157183a7..e78ac93c0 100644 --- a/cli/build/generate-kicad-project.ts +++ b/cli/build/generate-kicad-project.ts @@ -1,5 +1,6 @@ import fs from "node:fs" import path from "node:path" +import type { PlatformConfig } from "@tscircuit/props" import { CircuitJsonToKicadPcbConverter, CircuitJsonToKicadSchConverter, @@ -12,6 +13,7 @@ type GenerateKicadProjectOptions = { outputDir: string projectName: string writeFiles: boolean + platformConfig?: PlatformConfig } export type GeneratedKicadProject = { @@ -54,6 +56,7 @@ export const generateKicadProject = async ({ outputDir, projectName, writeFiles, + platformConfig, }: GenerateKicadProjectOptions): Promise => { const schConverter = new CircuitJsonToKicadSchConverter( circuitJson as AnyCircuitElement[], @@ -89,7 +92,7 @@ export const generateKicadProject = async ({ await resolveAndLoadKicad3dModelFiles({ model3dSourcePaths: pcbConverter.getModel3dSourcePaths(), projectName: sanitizedProjectName, - fetch: (modelPath) => globalThis.fetch(modelPath), + fetch: platformConfig?.platformFetch ?? globalThis.fetch, readFile: (modelPath) => fs.promises.readFile(modelPath), onModelFile: ({ outputPath, content }) => { const outputFilePath = path.join(outputDir, outputPath) diff --git a/cli/build/register.ts b/cli/build/register.ts index a16cfa1a3..c1b71c96d 100644 --- a/cli/build/register.ts +++ b/cli/build/register.ts @@ -468,6 +468,7 @@ export const registerBuild = (program: Command) => { outputDir: projectOutputDir, projectName, writeFiles: shouldWriteKicadFiles, + platformConfig, }) kicadProjects.push({ ...project,