@tscircuit/footprinter 0.0.3 → 0.0.4
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.cjs +256 -246
- package/dist/index.cjs.map +1 -1
- package/package.json +1 -1
- package/src/fn/dip.ts +12 -0
- package/src/footprinter.ts +1 -1
- package/tests/dip.test.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -217,8 +217,8 @@ var require_lodash10 = __commonJS({
|
|
|
217
217
|
if (typeof end == "undefined") {
|
|
218
218
|
end = array ? array.length : 0;
|
|
219
219
|
}
|
|
220
|
-
var index = -1,
|
|
221
|
-
while (++index <
|
|
220
|
+
var index = -1, length3 = end - start || 0, result = Array(length3 < 0 ? 0 : length3);
|
|
221
|
+
while (++index < length3) {
|
|
222
222
|
result[index] = array[start + index];
|
|
223
223
|
}
|
|
224
224
|
return result;
|
|
@@ -451,8 +451,8 @@ var require_lodash18 = __commonJS({
|
|
|
451
451
|
if (!objectTypes[typeof iterable])
|
|
452
452
|
return result;
|
|
453
453
|
callback = callback && typeof thisArg == "undefined" ? callback : baseCreateCallback(callback, thisArg, 3);
|
|
454
|
-
var ownIndex = -1, ownProps = objectTypes[typeof iterable] && keys(iterable),
|
|
455
|
-
while (++ownIndex <
|
|
454
|
+
var ownIndex = -1, ownProps = objectTypes[typeof iterable] && keys(iterable), length3 = ownProps ? ownProps.length : 0;
|
|
455
|
+
while (++ownIndex < length3) {
|
|
456
456
|
index = ownProps[ownIndex];
|
|
457
457
|
if (callback(iterable[index], index, collection) === false)
|
|
458
458
|
return result;
|
|
@@ -470,10 +470,10 @@ var require_lodash19 = __commonJS({
|
|
|
470
470
|
var baseCreateCallback = require_lodash17();
|
|
471
471
|
var forOwn = require_lodash18();
|
|
472
472
|
function forEach(collection, callback, thisArg) {
|
|
473
|
-
var index = -1,
|
|
473
|
+
var index = -1, length3 = collection ? collection.length : 0;
|
|
474
474
|
callback = callback && typeof thisArg == "undefined" ? callback : baseCreateCallback(callback, thisArg, 3);
|
|
475
|
-
if (typeof
|
|
476
|
-
while (++index <
|
|
475
|
+
if (typeof length3 == "number") {
|
|
476
|
+
while (++index < length3) {
|
|
477
477
|
if (callback(collection[index], index, collection) === false) {
|
|
478
478
|
break;
|
|
479
479
|
}
|
|
@@ -6630,7 +6630,7 @@ var require_dist = __commonJS({
|
|
|
6630
6630
|
inductance: () => inductance,
|
|
6631
6631
|
layer_ref: () => layer_ref,
|
|
6632
6632
|
layer_string: () => layer_string,
|
|
6633
|
-
length: () =>
|
|
6633
|
+
length: () => length3,
|
|
6634
6634
|
pcb_board: () => pcb_board,
|
|
6635
6635
|
pcb_component: () => pcb_component,
|
|
6636
6636
|
pcb_hole: () => pcb_hole,
|
|
@@ -6767,16 +6767,16 @@ var require_dist = __commonJS({
|
|
|
6767
6767
|
};
|
|
6768
6768
|
}
|
|
6769
6769
|
};
|
|
6770
|
-
var
|
|
6771
|
-
var resistance =
|
|
6772
|
-
var capacitance =
|
|
6773
|
-
var inductance =
|
|
6774
|
-
var voltage =
|
|
6775
|
-
var
|
|
6776
|
-
var distance2 =
|
|
6777
|
-
var current =
|
|
6778
|
-
var time =
|
|
6779
|
-
var rotation =
|
|
6770
|
+
var import_zod5 = require_lib2();
|
|
6771
|
+
var resistance = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6772
|
+
var capacitance = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6773
|
+
var inductance = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6774
|
+
var voltage = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6775
|
+
var length3 = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6776
|
+
var distance2 = length3;
|
|
6777
|
+
var current = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6778
|
+
var time = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6779
|
+
var rotation = import_zod5.z.string().or(import_zod5.z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
6780
6780
|
var import_zod22 = require_lib2();
|
|
6781
6781
|
var point = import_zod22.z.object({
|
|
6782
6782
|
x: distance2,
|
|
@@ -6798,14 +6798,14 @@ var require_dist = __commonJS({
|
|
|
6798
6798
|
"mouser",
|
|
6799
6799
|
"lcsc"
|
|
6800
6800
|
]);
|
|
6801
|
-
var
|
|
6802
|
-
var source_component_base =
|
|
6803
|
-
type:
|
|
6804
|
-
ftype:
|
|
6805
|
-
source_component_id:
|
|
6806
|
-
name:
|
|
6801
|
+
var import_zod52 = require_lib2();
|
|
6802
|
+
var source_component_base = import_zod52.z.object({
|
|
6803
|
+
type: import_zod52.z.literal("source_component"),
|
|
6804
|
+
ftype: import_zod52.z.string().optional(),
|
|
6805
|
+
source_component_id: import_zod52.z.string(),
|
|
6806
|
+
name: import_zod52.z.string(),
|
|
6807
6807
|
// part_numbers: z.array(z.string()).optional(),
|
|
6808
|
-
supplier_part_numbers:
|
|
6808
|
+
supplier_part_numbers: import_zod52.z.record(supplier_name, import_zod52.z.array(import_zod52.z.string())).optional()
|
|
6809
6809
|
});
|
|
6810
6810
|
var source_simple_capacitor = source_component_base.extend({
|
|
6811
6811
|
ftype: import_zod6.z.literal("simple_capacitor"),
|
|
@@ -7051,8 +7051,8 @@ var require_dist = __commonJS({
|
|
|
7051
7051
|
center: point,
|
|
7052
7052
|
layer: layer_ref,
|
|
7053
7053
|
rotation,
|
|
7054
|
-
width:
|
|
7055
|
-
height:
|
|
7054
|
+
width: length3,
|
|
7055
|
+
height: length3
|
|
7056
7056
|
}).describe("Defines a component on the PCB");
|
|
7057
7057
|
var import_zod322 = require_lib2();
|
|
7058
7058
|
var pcb_hole = import_zod322.z.object({
|
|
@@ -7183,8 +7183,8 @@ var require_dist = __commonJS({
|
|
|
7183
7183
|
var import_zod41 = require_lib2();
|
|
7184
7184
|
var pcb_board = import_zod41.z.object({
|
|
7185
7185
|
type: import_zod41.z.literal("pcb_board"),
|
|
7186
|
-
width:
|
|
7187
|
-
height:
|
|
7186
|
+
width: length3,
|
|
7187
|
+
height: length3,
|
|
7188
7188
|
center: point
|
|
7189
7189
|
}).describe("Defines the board outline of the PCB");
|
|
7190
7190
|
var import_zod422 = require_lib2();
|
|
@@ -7297,216 +7297,6 @@ var platedhole = (pn, x, y, id, od) => {
|
|
|
7297
7297
|
};
|
|
7298
7298
|
};
|
|
7299
7299
|
|
|
7300
|
-
// src/fn/dip.ts
|
|
7301
|
-
var getCcwDipCoords = (pinCount, pn, w, p) => {
|
|
7302
|
-
const ph = pinCount / 2;
|
|
7303
|
-
const isLeft = pn <= ph;
|
|
7304
|
-
const leftPinGaps = ph - 1;
|
|
7305
|
-
const gs = p;
|
|
7306
|
-
const h = gs * leftPinGaps;
|
|
7307
|
-
if (isLeft) {
|
|
7308
|
-
return { x: -w / 2, y: h / 2 - (pn - 1) * gs };
|
|
7309
|
-
} else {
|
|
7310
|
-
return { x: w / 2, y: -h / 2 + (pn - ph - 1) * gs };
|
|
7311
|
-
}
|
|
7312
|
-
};
|
|
7313
|
-
var dip = (params) => {
|
|
7314
|
-
const platedHoles = [];
|
|
7315
|
-
for (let i = 0; i < params.num_pins; i++) {
|
|
7316
|
-
const { x, y } = getCcwDipCoords(
|
|
7317
|
-
params.num_pins,
|
|
7318
|
-
i + 1,
|
|
7319
|
-
params.w,
|
|
7320
|
-
params.p ?? 2.54
|
|
7321
|
-
);
|
|
7322
|
-
platedHoles.push(
|
|
7323
|
-
platedhole(i + 1, x, y, params.id ?? "0.8mm", params.od ?? "1mm")
|
|
7324
|
-
);
|
|
7325
|
-
}
|
|
7326
|
-
return platedHoles;
|
|
7327
|
-
};
|
|
7328
|
-
|
|
7329
|
-
// src/fn/diode.ts
|
|
7330
|
-
var diode = (params) => {
|
|
7331
|
-
return [];
|
|
7332
|
-
};
|
|
7333
|
-
|
|
7334
|
-
// src/helpers/rectpad.ts
|
|
7335
|
-
var rectpad = (pn, x, y, w, h) => {
|
|
7336
|
-
return {
|
|
7337
|
-
type: "pcb_smtpad",
|
|
7338
|
-
x,
|
|
7339
|
-
y,
|
|
7340
|
-
width: w,
|
|
7341
|
-
height: h,
|
|
7342
|
-
layer: "top",
|
|
7343
|
-
shape: "rect",
|
|
7344
|
-
pcb_smtpad_id: "",
|
|
7345
|
-
port_hints: [pn.toString()]
|
|
7346
|
-
};
|
|
7347
|
-
};
|
|
7348
|
-
|
|
7349
|
-
// src/helpers/passive-fn.ts
|
|
7350
|
-
var import_mm2 = __toESM(require("@tscircuit/mm"), 1);
|
|
7351
|
-
var sizes = [
|
|
7352
|
-
{
|
|
7353
|
-
imperial: "01005",
|
|
7354
|
-
metric: "0402",
|
|
7355
|
-
Z_mm_min: 0.58,
|
|
7356
|
-
G_mm_min: 0.18,
|
|
7357
|
-
X_mm_min: 0.21,
|
|
7358
|
-
C_mm_ref: 0.038
|
|
7359
|
-
},
|
|
7360
|
-
{
|
|
7361
|
-
imperial: "0201",
|
|
7362
|
-
metric: "0603",
|
|
7363
|
-
Z_mm_min: 0.9,
|
|
7364
|
-
G_mm_min: 0.3,
|
|
7365
|
-
X_mm_min: 0.3,
|
|
7366
|
-
C_mm_ref: 0.6
|
|
7367
|
-
},
|
|
7368
|
-
{
|
|
7369
|
-
imperial: "0402",
|
|
7370
|
-
metric: "1005",
|
|
7371
|
-
Z_mm_min: 1.6,
|
|
7372
|
-
G_mm_min: 0.4,
|
|
7373
|
-
X_mm_min: 0.7,
|
|
7374
|
-
C_mm_ref: 1
|
|
7375
|
-
},
|
|
7376
|
-
{
|
|
7377
|
-
imperial: "0603",
|
|
7378
|
-
metric: "1608",
|
|
7379
|
-
Z_mm_min: 2.6,
|
|
7380
|
-
G_mm_min: 0.6,
|
|
7381
|
-
X_mm_min: 1,
|
|
7382
|
-
C_mm_ref: 1.7
|
|
7383
|
-
},
|
|
7384
|
-
{
|
|
7385
|
-
imperial: "0805",
|
|
7386
|
-
metric: "2012",
|
|
7387
|
-
Z_mm_min: 3,
|
|
7388
|
-
G_mm_min: 0.6,
|
|
7389
|
-
X_mm_min: 1.2,
|
|
7390
|
-
C_mm_ref: 1.9
|
|
7391
|
-
},
|
|
7392
|
-
{
|
|
7393
|
-
imperial: "1206",
|
|
7394
|
-
metric: "3216",
|
|
7395
|
-
Z_mm_min: 4.2,
|
|
7396
|
-
G_mm_min: 1.2,
|
|
7397
|
-
X_mm_min: 1.4,
|
|
7398
|
-
C_mm_ref: 2.8
|
|
7399
|
-
},
|
|
7400
|
-
{
|
|
7401
|
-
imperial: "1210",
|
|
7402
|
-
metric: "3225",
|
|
7403
|
-
Z_mm_min: 4.2,
|
|
7404
|
-
G_mm_min: 1.2,
|
|
7405
|
-
X_mm_min: 2.4,
|
|
7406
|
-
C_mm_ref: 2.8
|
|
7407
|
-
},
|
|
7408
|
-
{
|
|
7409
|
-
imperial: "2010",
|
|
7410
|
-
metric: "5025",
|
|
7411
|
-
Z_mm_min: 6,
|
|
7412
|
-
G_mm_min: 2.6,
|
|
7413
|
-
X_mm_min: 2.4,
|
|
7414
|
-
C_mm_ref: 4.4
|
|
7415
|
-
},
|
|
7416
|
-
{
|
|
7417
|
-
imperial: "2512",
|
|
7418
|
-
metric: "6332",
|
|
7419
|
-
Z_mm_min: 7.2,
|
|
7420
|
-
G_mm_min: 3.8,
|
|
7421
|
-
X_mm_min: 3,
|
|
7422
|
-
C_mm_ref: 5.6
|
|
7423
|
-
}
|
|
7424
|
-
];
|
|
7425
|
-
var metricMap = sizes.reduce((acc, s) => {
|
|
7426
|
-
acc[s.metric] = s;
|
|
7427
|
-
return acc;
|
|
7428
|
-
}, {});
|
|
7429
|
-
var imperialMap = sizes.reduce(
|
|
7430
|
-
(acc, s) => {
|
|
7431
|
-
acc[s.imperial] = s;
|
|
7432
|
-
return acc;
|
|
7433
|
-
},
|
|
7434
|
-
{}
|
|
7435
|
-
);
|
|
7436
|
-
var deriveXFromH = (h) => 0.079 * h ** 2 + 0.94 * h - 9e-3;
|
|
7437
|
-
var deriveZFromW = (w) => 1.09 * w + 0.6;
|
|
7438
|
-
var deriveGFromW = (w) => 0.59 * w - 0.31;
|
|
7439
|
-
var deriveCFromW = (w) => -0.01 * w ** 2 + 0.94 * w + 0.03;
|
|
7440
|
-
var passive = (params) => {
|
|
7441
|
-
let { tht, p, pw, ph, metric, imperial, w, h } = params;
|
|
7442
|
-
if (typeof w === "string")
|
|
7443
|
-
w = (0, import_mm2.default)(w);
|
|
7444
|
-
if (typeof h === "string")
|
|
7445
|
-
h = (0, import_mm2.default)(h);
|
|
7446
|
-
if (typeof p === "string")
|
|
7447
|
-
p = (0, import_mm2.default)(p);
|
|
7448
|
-
if (typeof pw === "string")
|
|
7449
|
-
pw = (0, import_mm2.default)(pw);
|
|
7450
|
-
if (typeof ph === "string")
|
|
7451
|
-
ph = (0, import_mm2.default)(ph);
|
|
7452
|
-
if (h > w) {
|
|
7453
|
-
throw new Error(
|
|
7454
|
-
"height cannot be greater than width (rotated footprint not yet implemented)"
|
|
7455
|
-
);
|
|
7456
|
-
}
|
|
7457
|
-
let sz;
|
|
7458
|
-
if (metric) {
|
|
7459
|
-
sz = metricMap[metric];
|
|
7460
|
-
}
|
|
7461
|
-
if (imperial) {
|
|
7462
|
-
sz = imperialMap[imperial];
|
|
7463
|
-
}
|
|
7464
|
-
if (!sz && w && h && !pw && !ph) {
|
|
7465
|
-
sz = {
|
|
7466
|
-
imperial: "custom",
|
|
7467
|
-
metric: "custom",
|
|
7468
|
-
Z_mm_min: deriveZFromW(w),
|
|
7469
|
-
G_mm_min: deriveGFromW(w),
|
|
7470
|
-
X_mm_min: deriveXFromH(h),
|
|
7471
|
-
C_mm_ref: deriveCFromW(w)
|
|
7472
|
-
};
|
|
7473
|
-
}
|
|
7474
|
-
if (sz) {
|
|
7475
|
-
w = sz.Z_mm_min;
|
|
7476
|
-
h = sz.X_mm_min;
|
|
7477
|
-
p = sz.C_mm_ref;
|
|
7478
|
-
pw = (sz.Z_mm_min - sz.G_mm_min) / 2;
|
|
7479
|
-
ph = (sz.Z_mm_min - sz.G_mm_min) / 2;
|
|
7480
|
-
}
|
|
7481
|
-
if (pw === void 0)
|
|
7482
|
-
throw new Error(`could not infer pad width`);
|
|
7483
|
-
if (ph === void 0)
|
|
7484
|
-
throw new Error(`could not infer pad width`);
|
|
7485
|
-
if (tht) {
|
|
7486
|
-
return [
|
|
7487
|
-
platedhole(1, -p / 2, 0, pw, pw * 1 / 0.8),
|
|
7488
|
-
platedhole(2, -p / 2, 0, pw, pw * 1 / 0.8)
|
|
7489
|
-
];
|
|
7490
|
-
} else {
|
|
7491
|
-
return [rectpad(1, -p / 2, 0, pw, ph), rectpad(2, p / 2, 0, pw, ph)];
|
|
7492
|
-
}
|
|
7493
|
-
};
|
|
7494
|
-
|
|
7495
|
-
// src/fn/cap.ts
|
|
7496
|
-
var cap = (params) => {
|
|
7497
|
-
return passive(params);
|
|
7498
|
-
};
|
|
7499
|
-
|
|
7500
|
-
// src/fn/led.ts
|
|
7501
|
-
var led = (params) => {
|
|
7502
|
-
return passive(params);
|
|
7503
|
-
};
|
|
7504
|
-
|
|
7505
|
-
// src/fn/res.ts
|
|
7506
|
-
var res = (params) => {
|
|
7507
|
-
return passive(params);
|
|
7508
|
-
};
|
|
7509
|
-
|
|
7510
7300
|
// node_modules/zod/lib/index.mjs
|
|
7511
7301
|
var util;
|
|
7512
7302
|
(function(util2) {
|
|
@@ -11427,8 +11217,228 @@ var z = /* @__PURE__ */ Object.freeze({
|
|
|
11427
11217
|
ZodError
|
|
11428
11218
|
});
|
|
11429
11219
|
|
|
11430
|
-
// src/
|
|
11220
|
+
// src/fn/dip.ts
|
|
11431
11221
|
var import_soup = __toESM(require_dist(), 1);
|
|
11222
|
+
var dip_def = z.object({
|
|
11223
|
+
dip: z.literal(true),
|
|
11224
|
+
num_pins: z.number(),
|
|
11225
|
+
w: import_soup.length,
|
|
11226
|
+
p: import_soup.length.optional(),
|
|
11227
|
+
id: import_soup.length.optional(),
|
|
11228
|
+
od: import_soup.length.optional()
|
|
11229
|
+
});
|
|
11230
|
+
var getCcwDipCoords = (pinCount, pn, w, p) => {
|
|
11231
|
+
const ph = pinCount / 2;
|
|
11232
|
+
const isLeft = pn <= ph;
|
|
11233
|
+
const leftPinGaps = ph - 1;
|
|
11234
|
+
const gs = p;
|
|
11235
|
+
const h = gs * leftPinGaps;
|
|
11236
|
+
if (isLeft) {
|
|
11237
|
+
return { x: -w / 2, y: h / 2 - (pn - 1) * gs };
|
|
11238
|
+
} else {
|
|
11239
|
+
return { x: w / 2, y: -h / 2 + (pn - ph - 1) * gs };
|
|
11240
|
+
}
|
|
11241
|
+
};
|
|
11242
|
+
var dip = (params) => {
|
|
11243
|
+
params = dip_def.parse(params);
|
|
11244
|
+
const platedHoles = [];
|
|
11245
|
+
for (let i = 0; i < params.num_pins; i++) {
|
|
11246
|
+
const { x, y } = getCcwDipCoords(
|
|
11247
|
+
params.num_pins,
|
|
11248
|
+
i + 1,
|
|
11249
|
+
params.w,
|
|
11250
|
+
params.p ?? 2.54
|
|
11251
|
+
);
|
|
11252
|
+
platedHoles.push(
|
|
11253
|
+
platedhole(i + 1, x, y, params.id ?? "0.8mm", params.od ?? "1mm")
|
|
11254
|
+
);
|
|
11255
|
+
}
|
|
11256
|
+
return platedHoles;
|
|
11257
|
+
};
|
|
11258
|
+
|
|
11259
|
+
// src/fn/diode.ts
|
|
11260
|
+
var diode = (params) => {
|
|
11261
|
+
return [];
|
|
11262
|
+
};
|
|
11263
|
+
|
|
11264
|
+
// src/helpers/rectpad.ts
|
|
11265
|
+
var rectpad = (pn, x, y, w, h) => {
|
|
11266
|
+
return {
|
|
11267
|
+
type: "pcb_smtpad",
|
|
11268
|
+
x,
|
|
11269
|
+
y,
|
|
11270
|
+
width: w,
|
|
11271
|
+
height: h,
|
|
11272
|
+
layer: "top",
|
|
11273
|
+
shape: "rect",
|
|
11274
|
+
pcb_smtpad_id: "",
|
|
11275
|
+
port_hints: [pn.toString()]
|
|
11276
|
+
};
|
|
11277
|
+
};
|
|
11278
|
+
|
|
11279
|
+
// src/helpers/passive-fn.ts
|
|
11280
|
+
var import_mm2 = __toESM(require("@tscircuit/mm"), 1);
|
|
11281
|
+
var sizes = [
|
|
11282
|
+
{
|
|
11283
|
+
imperial: "01005",
|
|
11284
|
+
metric: "0402",
|
|
11285
|
+
Z_mm_min: 0.58,
|
|
11286
|
+
G_mm_min: 0.18,
|
|
11287
|
+
X_mm_min: 0.21,
|
|
11288
|
+
C_mm_ref: 0.038
|
|
11289
|
+
},
|
|
11290
|
+
{
|
|
11291
|
+
imperial: "0201",
|
|
11292
|
+
metric: "0603",
|
|
11293
|
+
Z_mm_min: 0.9,
|
|
11294
|
+
G_mm_min: 0.3,
|
|
11295
|
+
X_mm_min: 0.3,
|
|
11296
|
+
C_mm_ref: 0.6
|
|
11297
|
+
},
|
|
11298
|
+
{
|
|
11299
|
+
imperial: "0402",
|
|
11300
|
+
metric: "1005",
|
|
11301
|
+
Z_mm_min: 1.6,
|
|
11302
|
+
G_mm_min: 0.4,
|
|
11303
|
+
X_mm_min: 0.7,
|
|
11304
|
+
C_mm_ref: 1
|
|
11305
|
+
},
|
|
11306
|
+
{
|
|
11307
|
+
imperial: "0603",
|
|
11308
|
+
metric: "1608",
|
|
11309
|
+
Z_mm_min: 2.6,
|
|
11310
|
+
G_mm_min: 0.6,
|
|
11311
|
+
X_mm_min: 1,
|
|
11312
|
+
C_mm_ref: 1.7
|
|
11313
|
+
},
|
|
11314
|
+
{
|
|
11315
|
+
imperial: "0805",
|
|
11316
|
+
metric: "2012",
|
|
11317
|
+
Z_mm_min: 3,
|
|
11318
|
+
G_mm_min: 0.6,
|
|
11319
|
+
X_mm_min: 1.2,
|
|
11320
|
+
C_mm_ref: 1.9
|
|
11321
|
+
},
|
|
11322
|
+
{
|
|
11323
|
+
imperial: "1206",
|
|
11324
|
+
metric: "3216",
|
|
11325
|
+
Z_mm_min: 4.2,
|
|
11326
|
+
G_mm_min: 1.2,
|
|
11327
|
+
X_mm_min: 1.4,
|
|
11328
|
+
C_mm_ref: 2.8
|
|
11329
|
+
},
|
|
11330
|
+
{
|
|
11331
|
+
imperial: "1210",
|
|
11332
|
+
metric: "3225",
|
|
11333
|
+
Z_mm_min: 4.2,
|
|
11334
|
+
G_mm_min: 1.2,
|
|
11335
|
+
X_mm_min: 2.4,
|
|
11336
|
+
C_mm_ref: 2.8
|
|
11337
|
+
},
|
|
11338
|
+
{
|
|
11339
|
+
imperial: "2010",
|
|
11340
|
+
metric: "5025",
|
|
11341
|
+
Z_mm_min: 6,
|
|
11342
|
+
G_mm_min: 2.6,
|
|
11343
|
+
X_mm_min: 2.4,
|
|
11344
|
+
C_mm_ref: 4.4
|
|
11345
|
+
},
|
|
11346
|
+
{
|
|
11347
|
+
imperial: "2512",
|
|
11348
|
+
metric: "6332",
|
|
11349
|
+
Z_mm_min: 7.2,
|
|
11350
|
+
G_mm_min: 3.8,
|
|
11351
|
+
X_mm_min: 3,
|
|
11352
|
+
C_mm_ref: 5.6
|
|
11353
|
+
}
|
|
11354
|
+
];
|
|
11355
|
+
var metricMap = sizes.reduce((acc, s) => {
|
|
11356
|
+
acc[s.metric] = s;
|
|
11357
|
+
return acc;
|
|
11358
|
+
}, {});
|
|
11359
|
+
var imperialMap = sizes.reduce(
|
|
11360
|
+
(acc, s) => {
|
|
11361
|
+
acc[s.imperial] = s;
|
|
11362
|
+
return acc;
|
|
11363
|
+
},
|
|
11364
|
+
{}
|
|
11365
|
+
);
|
|
11366
|
+
var deriveXFromH = (h) => 0.079 * h ** 2 + 0.94 * h - 9e-3;
|
|
11367
|
+
var deriveZFromW = (w) => 1.09 * w + 0.6;
|
|
11368
|
+
var deriveGFromW = (w) => 0.59 * w - 0.31;
|
|
11369
|
+
var deriveCFromW = (w) => -0.01 * w ** 2 + 0.94 * w + 0.03;
|
|
11370
|
+
var passive = (params) => {
|
|
11371
|
+
let { tht, p, pw, ph, metric, imperial, w, h } = params;
|
|
11372
|
+
if (typeof w === "string")
|
|
11373
|
+
w = (0, import_mm2.default)(w);
|
|
11374
|
+
if (typeof h === "string")
|
|
11375
|
+
h = (0, import_mm2.default)(h);
|
|
11376
|
+
if (typeof p === "string")
|
|
11377
|
+
p = (0, import_mm2.default)(p);
|
|
11378
|
+
if (typeof pw === "string")
|
|
11379
|
+
pw = (0, import_mm2.default)(pw);
|
|
11380
|
+
if (typeof ph === "string")
|
|
11381
|
+
ph = (0, import_mm2.default)(ph);
|
|
11382
|
+
if (h > w) {
|
|
11383
|
+
throw new Error(
|
|
11384
|
+
"height cannot be greater than width (rotated footprint not yet implemented)"
|
|
11385
|
+
);
|
|
11386
|
+
}
|
|
11387
|
+
let sz;
|
|
11388
|
+
if (metric) {
|
|
11389
|
+
sz = metricMap[metric];
|
|
11390
|
+
}
|
|
11391
|
+
if (imperial) {
|
|
11392
|
+
sz = imperialMap[imperial];
|
|
11393
|
+
}
|
|
11394
|
+
if (!sz && w && h && !pw && !ph) {
|
|
11395
|
+
sz = {
|
|
11396
|
+
imperial: "custom",
|
|
11397
|
+
metric: "custom",
|
|
11398
|
+
Z_mm_min: deriveZFromW(w),
|
|
11399
|
+
G_mm_min: deriveGFromW(w),
|
|
11400
|
+
X_mm_min: deriveXFromH(h),
|
|
11401
|
+
C_mm_ref: deriveCFromW(w)
|
|
11402
|
+
};
|
|
11403
|
+
}
|
|
11404
|
+
if (sz) {
|
|
11405
|
+
w = sz.Z_mm_min;
|
|
11406
|
+
h = sz.X_mm_min;
|
|
11407
|
+
p = sz.C_mm_ref;
|
|
11408
|
+
pw = (sz.Z_mm_min - sz.G_mm_min) / 2;
|
|
11409
|
+
ph = (sz.Z_mm_min - sz.G_mm_min) / 2;
|
|
11410
|
+
}
|
|
11411
|
+
if (pw === void 0)
|
|
11412
|
+
throw new Error(`could not infer pad width`);
|
|
11413
|
+
if (ph === void 0)
|
|
11414
|
+
throw new Error(`could not infer pad width`);
|
|
11415
|
+
if (tht) {
|
|
11416
|
+
return [
|
|
11417
|
+
platedhole(1, -p / 2, 0, pw, pw * 1 / 0.8),
|
|
11418
|
+
platedhole(2, -p / 2, 0, pw, pw * 1 / 0.8)
|
|
11419
|
+
];
|
|
11420
|
+
} else {
|
|
11421
|
+
return [rectpad(1, -p / 2, 0, pw, ph), rectpad(2, p / 2, 0, pw, ph)];
|
|
11422
|
+
}
|
|
11423
|
+
};
|
|
11424
|
+
|
|
11425
|
+
// src/fn/cap.ts
|
|
11426
|
+
var cap = (params) => {
|
|
11427
|
+
return passive(params);
|
|
11428
|
+
};
|
|
11429
|
+
|
|
11430
|
+
// src/fn/led.ts
|
|
11431
|
+
var led = (params) => {
|
|
11432
|
+
return passive(params);
|
|
11433
|
+
};
|
|
11434
|
+
|
|
11435
|
+
// src/fn/res.ts
|
|
11436
|
+
var res = (params) => {
|
|
11437
|
+
return passive(params);
|
|
11438
|
+
};
|
|
11439
|
+
|
|
11440
|
+
// src/helpers/zod/bga-def.ts
|
|
11441
|
+
var import_soup2 = __toESM(require_dist(), 1);
|
|
11432
11442
|
|
|
11433
11443
|
// src/helpers/zod/dim-2d.ts
|
|
11434
11444
|
var dim2d = z.string().transform((a) => {
|
|
@@ -11462,11 +11472,11 @@ var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
11462
11472
|
var bga_def = z.object({
|
|
11463
11473
|
num_pins: z.number(),
|
|
11464
11474
|
grid: dim2d,
|
|
11465
|
-
p:
|
|
11466
|
-
w:
|
|
11467
|
-
h:
|
|
11468
|
-
ball:
|
|
11469
|
-
pad:
|
|
11475
|
+
p: import_soup2.distance,
|
|
11476
|
+
w: import_soup2.length,
|
|
11477
|
+
h: import_soup2.length,
|
|
11478
|
+
ball: import_soup2.length.optional().describe("ball diameter"),
|
|
11479
|
+
pad: import_soup2.length.optional().describe("pad width/height"),
|
|
11470
11480
|
tlorigin: z.boolean().optional(),
|
|
11471
11481
|
blorigin: z.boolean().optional(),
|
|
11472
11482
|
trorigin: z.boolean().optional(),
|
|
@@ -11554,7 +11564,7 @@ ${JSON.stringify(
|
|
|
11554
11564
|
var string = (def) => {
|
|
11555
11565
|
let fp2 = footprinter();
|
|
11556
11566
|
const def_parts = def.split("_").map((s) => {
|
|
11557
|
-
const m = s.match(/([a-z]+)([\(\d
|
|
11567
|
+
const m = s.match(/([a-z]+)([\(\d\.\+].*)?/);
|
|
11558
11568
|
const [_, fn, v] = m ?? [];
|
|
11559
11569
|
return { fn: m?.[1], v: m?.[2] };
|
|
11560
11570
|
});
|