@tscircuit/footprinter 0.0.33 → 0.0.35
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/README.md +4 -0
- package/dist/index.cjs +40 -26
- package/dist/index.cjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -69,3 +69,7 @@ footprinter could cause the defaults to change, which is why sloppy definitions
|
|
|
69
69
|
are generally not desirable.
|
|
70
70
|
|
|
71
71
|
Currently it's not possible to see if a given definition is sloppy.
|
|
72
|
+
|
|
73
|
+
An example of a sloppy definition is `bga64`. It's very underconstrained and
|
|
74
|
+
unlikely to be correct (what's the pitch? pad size?). tscircuit strict mode
|
|
75
|
+
or a linter will eventually error if it sees these.
|
package/dist/index.cjs
CHANGED
|
@@ -3234,6 +3234,7 @@ __export(fn_exports, {
|
|
|
3234
3234
|
quad: () => quad,
|
|
3235
3235
|
res: () => res,
|
|
3236
3236
|
soic: () => soic,
|
|
3237
|
+
sot236: () => sot236,
|
|
3237
3238
|
ssop: () => ssop,
|
|
3238
3239
|
tssop: () => tssop
|
|
3239
3240
|
});
|
|
@@ -3265,13 +3266,13 @@ var platedhole = (pn, x, y, id, od) => {
|
|
|
3265
3266
|
// src/fn/dip.ts
|
|
3266
3267
|
var import_zod = require("zod");
|
|
3267
3268
|
var import_soup = __toESM(require_dist(), 1);
|
|
3268
|
-
var
|
|
3269
|
+
var extendDipDef = (newDefaults) => import_zod.z.object({
|
|
3269
3270
|
dip: import_zod.z.literal(true),
|
|
3270
3271
|
num_pins: import_zod.z.number(),
|
|
3271
3272
|
wide: import_zod.z.boolean().optional(),
|
|
3272
3273
|
narrow: import_zod.z.boolean().optional(),
|
|
3273
3274
|
w: import_soup.length.optional(),
|
|
3274
|
-
p: import_soup.length.default(import_soup.length.parse("2.54mm")),
|
|
3275
|
+
p: import_soup.length.default(import_soup.length.parse(newDefaults.p ?? "2.54mm")),
|
|
3275
3276
|
id: import_soup.length.optional(),
|
|
3276
3277
|
od: import_soup.length.optional()
|
|
3277
3278
|
}).transform((v) => {
|
|
@@ -3289,11 +3290,12 @@ var dip_def = import_zod.z.object({
|
|
|
3289
3290
|
} else if (v.narrow) {
|
|
3290
3291
|
v.w = import_soup.length.parse("300mil");
|
|
3291
3292
|
} else {
|
|
3292
|
-
v.w = import_soup.length.parse("300mil");
|
|
3293
|
+
v.w = import_soup.length.parse(newDefaults.w ?? "300mil");
|
|
3293
3294
|
}
|
|
3294
3295
|
}
|
|
3295
3296
|
return v;
|
|
3296
3297
|
});
|
|
3298
|
+
var dip_def = extendDipDef({});
|
|
3297
3299
|
var getCcwDipCoords = (pinCount, pn, w, p) => {
|
|
3298
3300
|
const ph = pinCount / 2;
|
|
3299
3301
|
const isLeft = pn <= ph;
|
|
@@ -3672,16 +3674,16 @@ var extendSoicDef = (newDefaults) => import_zod5.z.object({
|
|
|
3672
3674
|
num_pins: import_zod5.z.number(),
|
|
3673
3675
|
w: import_soup3.length.default(import_soup3.length.parse(newDefaults.w ?? "5.3mm")),
|
|
3674
3676
|
p: import_soup3.length.default(import_soup3.length.parse(newDefaults.p ?? "1.27mm")),
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
+
pw: import_soup3.length.optional(),
|
|
3678
|
+
pl: import_soup3.length.optional()
|
|
3677
3679
|
}).transform((v) => {
|
|
3678
|
-
if (!v.
|
|
3679
|
-
v.
|
|
3680
|
-
v.
|
|
3681
|
-
} else if (!v.
|
|
3682
|
-
v.
|
|
3683
|
-
} else if (!v.
|
|
3684
|
-
v.
|
|
3680
|
+
if (!v.pw && !v.pl) {
|
|
3681
|
+
v.pw = import_soup3.length.parse("0.6mm");
|
|
3682
|
+
v.pl = import_soup3.length.parse("1.0mm");
|
|
3683
|
+
} else if (!v.pw) {
|
|
3684
|
+
v.pw = v.pl * (0.6 / 1);
|
|
3685
|
+
} else if (!v.pl) {
|
|
3686
|
+
v.pl = v.pw * (1 / 0.6);
|
|
3685
3687
|
}
|
|
3686
3688
|
return v;
|
|
3687
3689
|
});
|
|
@@ -3702,7 +3704,7 @@ var soic = (raw_params) => {
|
|
|
3702
3704
|
return soicWithoutParsing(soic_def.parse(raw_params));
|
|
3703
3705
|
};
|
|
3704
3706
|
var soicWithoutParsing = (params) => {
|
|
3705
|
-
const
|
|
3707
|
+
const pads = [];
|
|
3706
3708
|
for (let i = 0; i < params.num_pins; i++) {
|
|
3707
3709
|
const { x, y } = getCcwSoicCoords(
|
|
3708
3710
|
params.num_pins,
|
|
@@ -3710,12 +3712,10 @@ var soicWithoutParsing = (params) => {
|
|
|
3710
3712
|
params.w,
|
|
3711
3713
|
params.p ?? 1.27
|
|
3712
3714
|
);
|
|
3713
|
-
|
|
3714
|
-
platedhole(i + 1, x, y, params.id ?? "0.6mm", params.od ?? "1mm")
|
|
3715
|
-
);
|
|
3715
|
+
pads.push(rectpad(i + 1, x, y, params.pw ?? "0.6mm", params.pl ?? "1mm"));
|
|
3716
3716
|
}
|
|
3717
|
-
const sw = params.w - params.
|
|
3718
|
-
const sh = (params.num_pins / 2 - 1) * params.p + params.
|
|
3717
|
+
const sw = params.w - params.pw - 0.4;
|
|
3718
|
+
const sh = (params.num_pins / 2 - 1) * params.p + params.pl + 0.4;
|
|
3719
3719
|
const silkscreenBorder = {
|
|
3720
3720
|
layer: "top",
|
|
3721
3721
|
pcb_component_id: "",
|
|
@@ -3734,7 +3734,7 @@ var soicWithoutParsing = (params) => {
|
|
|
3734
3734
|
],
|
|
3735
3735
|
type: "pcb_silkscreen_path"
|
|
3736
3736
|
};
|
|
3737
|
-
return [...
|
|
3737
|
+
return [...pads, silkscreenBorder];
|
|
3738
3738
|
};
|
|
3739
3739
|
|
|
3740
3740
|
// src/fn/quad.ts
|
|
@@ -4092,6 +4092,15 @@ var tssop = (raw_params) => {
|
|
|
4092
4092
|
return soicWithoutParsing(tssop_def.parse(raw_params));
|
|
4093
4093
|
};
|
|
4094
4094
|
|
|
4095
|
+
// src/fn/sot236.ts
|
|
4096
|
+
var sot236_def = extendSoicDef({
|
|
4097
|
+
p: "0.95mm",
|
|
4098
|
+
w: "1.6mm"
|
|
4099
|
+
});
|
|
4100
|
+
var sot236 = (params) => {
|
|
4101
|
+
return soicWithoutParsing(sot236_def.parse(params));
|
|
4102
|
+
};
|
|
4103
|
+
|
|
4095
4104
|
// src/helpers/is-not-null.ts
|
|
4096
4105
|
function isNotNull(value) {
|
|
4097
4106
|
return value !== null;
|
|
@@ -4134,14 +4143,19 @@ var footprinter = () => {
|
|
|
4134
4143
|
}
|
|
4135
4144
|
return (v) => {
|
|
4136
4145
|
if (Object.keys(target).length === 0) {
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
if (v) {
|
|
4141
|
-
target.imperial = v;
|
|
4142
|
-
}
|
|
4146
|
+
if (`${prop}${v}` in fn_exports) {
|
|
4147
|
+
target[`${prop}${v}`] = true;
|
|
4148
|
+
target.fn = `${prop}${v}`;
|
|
4143
4149
|
} else {
|
|
4144
|
-
target
|
|
4150
|
+
target[prop] = true;
|
|
4151
|
+
target.fn = prop;
|
|
4152
|
+
if (prop === "res" || prop === "cap") {
|
|
4153
|
+
if (v) {
|
|
4154
|
+
target.imperial = v;
|
|
4155
|
+
}
|
|
4156
|
+
} else {
|
|
4157
|
+
target.num_pins = Number.parseFloat(v);
|
|
4158
|
+
}
|
|
4145
4159
|
}
|
|
4146
4160
|
} else {
|
|
4147
4161
|
if (!v && ["w", "h", "p"].includes(prop)) {
|