@tscircuit/footprinter 0.0.32 → 0.0.34

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 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
@@ -3220,6 +3220,24 @@ __export(src_exports, {
3220
3220
  });
3221
3221
  module.exports = __toCommonJS(src_exports);
3222
3222
 
3223
+ // src/fn/index.ts
3224
+ var fn_exports = {};
3225
+ __export(fn_exports, {
3226
+ bga: () => bga,
3227
+ cap: () => cap,
3228
+ diode: () => diode,
3229
+ dip: () => dip,
3230
+ led: () => led,
3231
+ mlp: () => mlp,
3232
+ qfn: () => qfn,
3233
+ qfp: () => qfp,
3234
+ quad: () => quad,
3235
+ res: () => res,
3236
+ soic: () => soic,
3237
+ ssop: () => ssop,
3238
+ tssop: () => tssop
3239
+ });
3240
+
3223
3241
  // src/helpers/u-curve.ts
3224
3242
  var u_curve = Array.from(
3225
3243
  { length: 9 },
@@ -3649,11 +3667,11 @@ ${JSON.stringify(
3649
3667
  // src/fn/soic.ts
3650
3668
  var import_zod5 = require("zod");
3651
3669
  var import_soup3 = __toESM(require_dist(), 1);
3652
- var soic_def = import_zod5.z.object({
3670
+ var extendSoicDef = (newDefaults) => import_zod5.z.object({
3653
3671
  soic: import_zod5.z.literal(true),
3654
3672
  num_pins: import_zod5.z.number(),
3655
- w: import_soup3.length.default(import_soup3.length.parse("5.3mm")),
3656
- p: import_soup3.length.default(import_soup3.length.parse("1.27mm")),
3673
+ w: import_soup3.length.default(import_soup3.length.parse(newDefaults.w ?? "5.3mm")),
3674
+ p: import_soup3.length.default(import_soup3.length.parse(newDefaults.p ?? "1.27mm")),
3657
3675
  id: import_soup3.length.optional(),
3658
3676
  od: import_soup3.length.optional()
3659
3677
  }).transform((v) => {
@@ -3667,6 +3685,7 @@ var soic_def = import_zod5.z.object({
3667
3685
  }
3668
3686
  return v;
3669
3687
  });
3688
+ var soic_def = extendSoicDef({});
3670
3689
  var getCcwSoicCoords = (pinCount, pn, w, p) => {
3671
3690
  const ph = pinCount / 2;
3672
3691
  const isLeft = pn <= ph;
@@ -3680,7 +3699,9 @@ var getCcwSoicCoords = (pinCount, pn, w, p) => {
3680
3699
  }
3681
3700
  };
3682
3701
  var soic = (raw_params) => {
3683
- const params = soic_def.parse(raw_params);
3702
+ return soicWithoutParsing(soic_def.parse(raw_params));
3703
+ };
3704
+ var soicWithoutParsing = (params) => {
3684
3705
  const platedHoles = [];
3685
3706
  for (let i = 0; i < params.num_pins; i++) {
3686
3707
  const { x, y } = getCcwSoicCoords(
@@ -4053,6 +4074,24 @@ var mlp = (params) => {
4053
4074
  return quad(params);
4054
4075
  };
4055
4076
 
4077
+ // src/fn/ssop.ts
4078
+ var ssop_def = extendSoicDef({
4079
+ w: "3.9mm",
4080
+ p: "1.27mm"
4081
+ });
4082
+ var ssop = (raw_params) => {
4083
+ return soicWithoutParsing(ssop_def.parse(raw_params));
4084
+ };
4085
+
4086
+ // src/fn/tssop.ts
4087
+ var tssop_def = extendSoicDef({
4088
+ w: "6.1mm",
4089
+ p: "0.65mm"
4090
+ });
4091
+ var tssop = (raw_params) => {
4092
+ return soicWithoutParsing(tssop_def.parse(raw_params));
4093
+ };
4094
+
4056
4095
  // src/helpers/is-not-null.ts
4057
4096
  function isNotNull(value) {
4058
4097
  return value !== null;
@@ -4080,30 +4119,10 @@ var footprinter = () => {
4080
4119
  {},
4081
4120
  {
4082
4121
  get: (target, prop) => {
4083
- console.log(prop, target);
4084
4122
  if (prop === "soup") {
4085
- if ("dip" in target)
4086
- return () => dip(target);
4087
- if ("diode" in target)
4088
- return () => diode(target);
4089
- if ("cap" in target)
4090
- return () => cap(target);
4091
- if ("led" in target)
4092
- return () => led(target);
4093
- if ("res" in target)
4094
- return () => res(target);
4095
- if ("bga" in target)
4096
- return () => bga(target);
4097
- if ("soic" in target)
4098
- return () => soic(target);
4099
- if ("quad" in target)
4100
- return () => quad(target);
4101
- if ("qfn" in target)
4102
- return () => qfn(target);
4103
- if ("qfp" in target)
4104
- return () => qfp(target);
4105
- if ("mlp" in target)
4106
- return () => mlp(target);
4123
+ if ("fn" in target && fn_exports[target.fn]) {
4124
+ return () => fn_exports[target.fn](target);
4125
+ }
4107
4126
  return () => {
4108
4127
  throw new Error(
4109
4128
  `No function found for footprinter, make sure to specify .dip, .lr, .p, etc. Got "${prop}"`
@@ -4116,12 +4135,13 @@ var footprinter = () => {
4116
4135
  return (v) => {
4117
4136
  if (Object.keys(target).length === 0) {
4118
4137
  target[prop] = true;
4138
+ target.fn = prop;
4119
4139
  if (prop === "res" || prop === "cap") {
4120
4140
  if (v) {
4121
4141
  target.imperial = v;
4122
4142
  }
4123
4143
  } else {
4124
- target.num_pins = parseFloat(v);
4144
+ target.num_pins = Number.parseFloat(v);
4125
4145
  }
4126
4146
  } else {
4127
4147
  if (!v && ["w", "h", "p"].includes(prop)) {