@tscircuit/footprinter 0.0.316 → 0.0.317
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +11 -11
- package/dist/index.js +95 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { AnySoupElement, AnyCircuitElement } from 'circuit-json';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
|
+
type StandardSize = {
|
|
5
|
+
imperial: string;
|
|
6
|
+
metric: string;
|
|
7
|
+
p_mm_min: number;
|
|
8
|
+
ph_mm_min: number;
|
|
9
|
+
pw_mm_min: number;
|
|
10
|
+
h_mm_min: number;
|
|
11
|
+
w_mm_min: number;
|
|
12
|
+
};
|
|
13
|
+
declare const footprintSizes: StandardSize[];
|
|
14
|
+
|
|
4
15
|
type NowDefined<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
|
|
5
16
|
|
|
6
17
|
declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
@@ -1724,17 +1735,6 @@ declare const any_footprinter_def: z.ZodUnion<[z.ZodObject<{
|
|
|
1724
1735
|
}>]>;
|
|
1725
1736
|
type AnyFootprinterDefinitionOutput = z.infer<typeof any_footprinter_def>;
|
|
1726
1737
|
|
|
1727
|
-
type StandardSize = {
|
|
1728
|
-
imperial: string;
|
|
1729
|
-
metric: string;
|
|
1730
|
-
p_mm_min: number;
|
|
1731
|
-
ph_mm_min: number;
|
|
1732
|
-
pw_mm_min: number;
|
|
1733
|
-
h_mm_min: number;
|
|
1734
|
-
w_mm_min: number;
|
|
1735
|
-
};
|
|
1736
|
-
declare const footprintSizes: StandardSize[];
|
|
1737
|
-
|
|
1738
1738
|
type BaseOptionKey = "origin" | "norefdes" | "invert" | "faceup" | "nosilkscreen";
|
|
1739
1739
|
type FootprinterParamsBuilder<K extends string> = {
|
|
1740
1740
|
[P in K | BaseOptionKey | "params" | "soup" | "circuitJson"]: P extends "params" | "soup" | "circuitJson" ? Footprinter[P] : (v?: number | string | boolean) => FootprinterParamsBuilder<K>;
|
package/dist/index.js
CHANGED
|
@@ -146,7 +146,8 @@ var platedHoleWithRectPad = (options) => {
|
|
|
146
146
|
rectPadWidth,
|
|
147
147
|
rectPadHeight,
|
|
148
148
|
holeOffsetX = 0,
|
|
149
|
-
holeOffsetY = 0
|
|
149
|
+
holeOffsetY = 0,
|
|
150
|
+
rectBorderRadius
|
|
150
151
|
} = options;
|
|
151
152
|
return {
|
|
152
153
|
pcb_plated_hole_id: "",
|
|
@@ -159,6 +160,9 @@ var platedHoleWithRectPad = (options) => {
|
|
|
159
160
|
pad_shape: "rect",
|
|
160
161
|
rect_pad_width: mm2(rectPadWidth),
|
|
161
162
|
rect_pad_height: mm2(rectPadHeight),
|
|
163
|
+
...rectBorderRadius !== void 0 && {
|
|
164
|
+
rect_border_radius: rectBorderRadius
|
|
165
|
+
},
|
|
162
166
|
pcb_port_id: "",
|
|
163
167
|
layers: ["top", "bottom"],
|
|
164
168
|
port_hints: [pn.toString()],
|
|
@@ -6500,6 +6504,9 @@ var jst_def = base_def.extend({
|
|
|
6500
6504
|
ph: z60.boolean().optional().describe(
|
|
6501
6505
|
'JST PH (Through-hole) connector family. PH stands for "Pin Header".'
|
|
6502
6506
|
),
|
|
6507
|
+
zh: z60.boolean().optional().describe(
|
|
6508
|
+
"JST ZH (Through-hole) connector family. 1.5mm pitch wire-to-board."
|
|
6509
|
+
),
|
|
6503
6510
|
string: z60.string().optional()
|
|
6504
6511
|
});
|
|
6505
6512
|
var variantDefaults = {
|
|
@@ -6517,11 +6524,20 @@ var variantDefaults = {
|
|
|
6517
6524
|
pl: length47.parse("1.55mm"),
|
|
6518
6525
|
w: length47.parse("5.8mm"),
|
|
6519
6526
|
h: length47.parse("7.8mm")
|
|
6527
|
+
},
|
|
6528
|
+
zh: {
|
|
6529
|
+
p: length47.parse("1.5mm"),
|
|
6530
|
+
id: length47.parse("0.73mm"),
|
|
6531
|
+
pw: length47.parse("1.03mm"),
|
|
6532
|
+
pl: length47.parse("1.73mm"),
|
|
6533
|
+
w: length47.parse("3mm"),
|
|
6534
|
+
h: length47.parse("3.5mm")
|
|
6520
6535
|
}
|
|
6521
6536
|
};
|
|
6522
6537
|
function getVariant(params) {
|
|
6523
6538
|
if (params.sh) return "sh";
|
|
6524
6539
|
if (params.ph) return "ph";
|
|
6540
|
+
if (params.zh) return "zh";
|
|
6525
6541
|
return "ph";
|
|
6526
6542
|
}
|
|
6527
6543
|
function generatePads(variant, numPins, p, id, pw, pl) {
|
|
@@ -6541,6 +6557,26 @@ function generatePads(variant, numPins, p, id, pw, pl) {
|
|
|
6541
6557
|
})
|
|
6542
6558
|
);
|
|
6543
6559
|
}
|
|
6560
|
+
} else if (variant === "zh") {
|
|
6561
|
+
const startX = -((numPins - 1) / 2) * p;
|
|
6562
|
+
for (let i = 0; i < numPins; i++) {
|
|
6563
|
+
const x = startX + i * p;
|
|
6564
|
+
if (i === 0) {
|
|
6565
|
+
pads.push(
|
|
6566
|
+
platedHoleWithRectPad({
|
|
6567
|
+
pn: i + 1,
|
|
6568
|
+
x,
|
|
6569
|
+
y: 0,
|
|
6570
|
+
holeDiameter: id,
|
|
6571
|
+
rectPadWidth: pw,
|
|
6572
|
+
rectPadHeight: pl,
|
|
6573
|
+
rectBorderRadius: 0.12499977
|
|
6574
|
+
})
|
|
6575
|
+
);
|
|
6576
|
+
} else {
|
|
6577
|
+
pads.push(platedHolePill(i + 1, x, 0, id, pw, pl));
|
|
6578
|
+
}
|
|
6579
|
+
}
|
|
6544
6580
|
} else {
|
|
6545
6581
|
const startX = -((numPins - 1) / 2) * p;
|
|
6546
6582
|
for (let i = 0; i < numPins; i++) {
|
|
@@ -6553,7 +6589,7 @@ function generatePads(variant, numPins, p, id, pw, pl) {
|
|
|
6553
6589
|
}
|
|
6554
6590
|
return pads;
|
|
6555
6591
|
}
|
|
6556
|
-
function generateSilkscreenBody(variant, w, h) {
|
|
6592
|
+
function generateSilkscreenBody(variant, w, h, numPins, p) {
|
|
6557
6593
|
if (variant === "ph") {
|
|
6558
6594
|
return {
|
|
6559
6595
|
type: "pcb_silkscreen_path",
|
|
@@ -6569,6 +6605,26 @@ function generateSilkscreenBody(variant, w, h) {
|
|
|
6569
6605
|
stroke_width: 0.1,
|
|
6570
6606
|
pcb_silkscreen_path_id: ""
|
|
6571
6607
|
};
|
|
6608
|
+
} else if (variant === "zh" && numPins && p) {
|
|
6609
|
+
const pinSpan = (numPins - 1) * p;
|
|
6610
|
+
const bodyLeft = -pinSpan / 2 - 1.5;
|
|
6611
|
+
const bodyRight = pinSpan / 2 + 1.5;
|
|
6612
|
+
const bodyTop = -h / 2;
|
|
6613
|
+
const bodyBottom = h / 2;
|
|
6614
|
+
return {
|
|
6615
|
+
type: "pcb_silkscreen_path",
|
|
6616
|
+
layer: "top",
|
|
6617
|
+
pcb_component_id: "",
|
|
6618
|
+
route: [
|
|
6619
|
+
{ x: bodyLeft, y: bodyTop },
|
|
6620
|
+
{ x: bodyRight, y: bodyTop },
|
|
6621
|
+
{ x: bodyRight, y: bodyBottom },
|
|
6622
|
+
{ x: bodyLeft, y: bodyBottom },
|
|
6623
|
+
{ x: bodyLeft, y: bodyTop }
|
|
6624
|
+
],
|
|
6625
|
+
stroke_width: 0.1,
|
|
6626
|
+
pcb_silkscreen_path_id: ""
|
|
6627
|
+
};
|
|
6572
6628
|
} else {
|
|
6573
6629
|
return {
|
|
6574
6630
|
type: "pcb_silkscreen_path",
|
|
@@ -6597,8 +6653,15 @@ var jst = (raw_params) => {
|
|
|
6597
6653
|
}
|
|
6598
6654
|
const str = typeof raw_params.string === "string" ? raw_params.string : "";
|
|
6599
6655
|
const match = str.match(/(?:^|_)jst(\d+)(?:_|$)/);
|
|
6656
|
+
const zhMatch = str.match(/(?:^|_)zh(\d+)(?:_|$)/);
|
|
6600
6657
|
if (match && match[1]) {
|
|
6601
|
-
const parsed = parseInt(match[1], 10);
|
|
6658
|
+
const parsed = Number.parseInt(match[1], 10);
|
|
6659
|
+
if (!Number.isNaN(parsed)) {
|
|
6660
|
+
numPins = parsed;
|
|
6661
|
+
}
|
|
6662
|
+
}
|
|
6663
|
+
if (zhMatch && zhMatch[1]) {
|
|
6664
|
+
const parsed = Number.parseInt(zhMatch[1], 10);
|
|
6602
6665
|
if (!Number.isNaN(parsed)) {
|
|
6603
6666
|
numPins = parsed;
|
|
6604
6667
|
}
|
|
@@ -6609,7 +6672,7 @@ var jst = (raw_params) => {
|
|
|
6609
6672
|
);
|
|
6610
6673
|
}
|
|
6611
6674
|
const pads = generatePads(variant, numPins, p, id, pw, pl);
|
|
6612
|
-
const silkscreenBody = generateSilkscreenBody(variant, w, h);
|
|
6675
|
+
const silkscreenBody = generateSilkscreenBody(variant, w, h, numPins, p);
|
|
6613
6676
|
const silkscreenRefText = silkscreenRef(0, h / 2 + 1, 0.5);
|
|
6614
6677
|
return {
|
|
6615
6678
|
circuitJson: [...pads, silkscreenBody, silkscreenRefText],
|
|
@@ -6623,7 +6686,8 @@ var jst = (raw_params) => {
|
|
|
6623
6686
|
h,
|
|
6624
6687
|
num_pins: numPins,
|
|
6625
6688
|
sh: variant === "sh",
|
|
6626
|
-
ph: variant === "ph"
|
|
6689
|
+
ph: variant === "ph",
|
|
6690
|
+
zh: variant === "zh"
|
|
6627
6691
|
}
|
|
6628
6692
|
};
|
|
6629
6693
|
};
|
|
@@ -9109,10 +9173,27 @@ var to92l = (raw_params) => {
|
|
|
9109
9173
|
};
|
|
9110
9174
|
};
|
|
9111
9175
|
|
|
9112
|
-
// src/helpers/
|
|
9113
|
-
|
|
9114
|
-
|
|
9115
|
-
|
|
9176
|
+
// src/helpers/apply-norefdes.ts
|
|
9177
|
+
var applyNoRefDes = (elements, parameters) => {
|
|
9178
|
+
const refs = elements.filter(
|
|
9179
|
+
(el) => el.type === "pcb_silkscreen_text"
|
|
9180
|
+
);
|
|
9181
|
+
if (refs.length === 0) return elements;
|
|
9182
|
+
for (const ref of refs) {
|
|
9183
|
+
if (parameters.norefdes) {
|
|
9184
|
+
ref.text = "";
|
|
9185
|
+
}
|
|
9186
|
+
}
|
|
9187
|
+
return elements;
|
|
9188
|
+
};
|
|
9189
|
+
|
|
9190
|
+
// src/helpers/apply-nosilkscreen.ts
|
|
9191
|
+
var applyNoSilkscreen = (elements, parameters) => {
|
|
9192
|
+
if (!parameters.nosilkscreen) return elements;
|
|
9193
|
+
return elements.filter((element) => {
|
|
9194
|
+
return element.type !== "pcb_silkscreen_path" && element.type !== "pcb_silkscreen_text";
|
|
9195
|
+
});
|
|
9196
|
+
};
|
|
9116
9197
|
|
|
9117
9198
|
// src/helpers/apply-origin.ts
|
|
9118
9199
|
var applyOrigin = (elements, origin) => {
|
|
@@ -9208,32 +9289,15 @@ var applyOrigin = (elements, origin) => {
|
|
|
9208
9289
|
return elements;
|
|
9209
9290
|
};
|
|
9210
9291
|
|
|
9211
|
-
// src/helpers/
|
|
9212
|
-
|
|
9213
|
-
|
|
9214
|
-
|
|
9215
|
-
);
|
|
9216
|
-
if (refs.length === 0) return elements;
|
|
9217
|
-
for (const ref of refs) {
|
|
9218
|
-
if (parameters.norefdes) {
|
|
9219
|
-
ref.text = "";
|
|
9220
|
-
}
|
|
9221
|
-
}
|
|
9222
|
-
return elements;
|
|
9223
|
-
};
|
|
9224
|
-
|
|
9225
|
-
// src/helpers/apply-nosilkscreen.ts
|
|
9226
|
-
var applyNoSilkscreen = (elements, parameters) => {
|
|
9227
|
-
if (!parameters.nosilkscreen) return elements;
|
|
9228
|
-
return elements.filter((element) => {
|
|
9229
|
-
return element.type !== "pcb_silkscreen_path" && element.type !== "pcb_silkscreen_text";
|
|
9230
|
-
});
|
|
9231
|
-
};
|
|
9292
|
+
// src/helpers/is-not-null.ts
|
|
9293
|
+
function isNotNull(value) {
|
|
9294
|
+
return value !== null && value !== void 0;
|
|
9295
|
+
}
|
|
9232
9296
|
|
|
9233
9297
|
// src/footprinter.ts
|
|
9234
9298
|
var string2 = (def) => {
|
|
9235
9299
|
let fp2 = footprinter();
|
|
9236
|
-
const modifiedDef = def.replace(/^((?:\d{4}|\d{5}))(?=$|_|x)/, "res$1");
|
|
9300
|
+
const modifiedDef = def.replace(/^((?:\d{4}|\d{5}))(?=$|_|x)/, "res$1").replace(/^zh(\d+)(?:$|_)/, "jst$1_zh");
|
|
9237
9301
|
const def_parts = modifiedDef.split(/_(?!metric)/).map((s) => {
|
|
9238
9302
|
const m = s.match(/([a-zA-Z]+)([\(\d\.\+\?].*)?/);
|
|
9239
9303
|
if (!m) return null;
|