diff --git a/bun.lock b/bun.lock index 6afde8d9..e5272ca5 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,7 @@ "name": "@tscircuit/footprinter", "dependencies": { "@tscircuit/mm": "^0.0.8", - "zod": "^3.23.8", + "zod": "^3.25.74", }, "devDependencies": { "@biomejs/biome": "^1.9.4", @@ -517,10 +517,14 @@ "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], - "zod": ["zod@3.25.64", "", {}, "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g=="], + "zod": ["zod@3.25.74", "", {}, "sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg=="], "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@tscircuit/footprinter/zod": ["zod@3.25.64", "", {}, "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g=="], + + "circuit-json/zod": ["zod@3.25.64", "", {}, "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g=="], + "circuit-to-svg/@types/node": ["@types/node@22.15.31", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw=="], "color/color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], diff --git a/package.json b/package.json index 9365ad85..471311ff 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@tscircuit/mm": "^0.0.8", - "zod": "^3.23.8" + "zod": "^3.25.74" }, "peerDependencies": { "circuit-json": "*" diff --git a/src/fn/index.ts b/src/fn/index.ts index 2a1eda53..b3c495b0 100644 --- a/src/fn/index.ts +++ b/src/fn/index.ts @@ -7,6 +7,7 @@ export { bga } from "./bga" export { soic } from "./soic" export { quad } from "./quad" export { qfn } from "./qfn" +export { lqfn } from "./lqfn" export { qfp } from "./qfp" export { mlp } from "./mlp" export { ssop } from "./ssop" diff --git a/src/fn/lqfn.ts b/src/fn/lqfn.ts new file mode 100644 index 00000000..300e508c --- /dev/null +++ b/src/fn/lqfn.ts @@ -0,0 +1,12 @@ +import type { AnySoupElement } from "circuit-json" +import { base_quad_def, quad, quadTransform } from "./quad" +import type { z } from "zod" + +export const lqfn_def = base_quad_def.extend({}).transform(quadTransform) + +export const lqfn = ( + parameters: z.input, +): { circuitJson: AnySoupElement[]; parameters: any } => { + parameters.legsoutside = false + return quad(parameters) +} diff --git a/src/footprinter.ts b/src/footprinter.ts index b9ff98eb..d46e5027 100644 --- a/src/footprinter.ts +++ b/src/footprinter.ts @@ -58,6 +58,7 @@ export type Footprinter = { | "circularpads" > qfn: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p"> + lqfn: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p"> soic: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p" | "id" | "od"> mlp: (num_pins?: number) => FootprinterParamsBuilder<"w" | "h" | "p"> ssop: (num_pins?: number) => FootprinterParamsBuilder<"w" | "p"> diff --git a/src/helpers/zod/AnyFootprinterDefinitionOutput.ts b/src/helpers/zod/AnyFootprinterDefinitionOutput.ts index 5531c702..e64fba4b 100644 --- a/src/helpers/zod/AnyFootprinterDefinitionOutput.ts +++ b/src/helpers/zod/AnyFootprinterDefinitionOutput.ts @@ -8,6 +8,7 @@ import { ms012_def } from "src/fn/ms012" import { ms013_def } from "src/fn/ms013" import { pinrow_def } from "src/fn/pinrow" import { qfn_def } from "src/fn/qfn" +import { lqfn_def } from "src/fn/lqfn" import { qfp_def } from "src/fn/qfp" import { quad_def } from "src/fn/quad" import { sod_def } from "src/fn/sod123" @@ -32,6 +33,7 @@ export const any_footprinter_def = z.union([ ms013_def, pinrow_def, qfn_def, + lqfn_def, qfp_def, quad_def, sod_def, diff --git a/tests/__snapshots__/lqfn56_w7_h7_p0.4mm.snap.svg b/tests/__snapshots__/lqfn56_w7_h7_p0.4mm.snap.svg new file mode 100644 index 00000000..5f1e7621 --- /dev/null +++ b/tests/__snapshots__/lqfn56_w7_h7_p0.4mm.snap.svg @@ -0,0 +1 @@ +{REF} diff --git a/tests/lqfn.test.ts b/tests/lqfn.test.ts new file mode 100644 index 00000000..0ab53179 --- /dev/null +++ b/tests/lqfn.test.ts @@ -0,0 +1,9 @@ +import { test, expect } from "bun:test" +import { convertCircuitJsonToPcbSvg } from "circuit-to-svg" +import { fp } from "../src/footprinter" + +test("lqfn56_w7_h7_p0.4mm", () => { + const soup = fp.string("lqfn56_w7_h7_p0.4mm").circuitJson() + const svgContent = convertCircuitJsonToPcbSvg(soup) + expect(svgContent).toMatchSvgSnapshot(import.meta.path, "lqfn56_w7_h7_p0.4mm") +})