@tscircuit/core 0.0.1898 → 0.0.1900
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 +1882 -0
- package/dist/index.js +176 -47
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -4988,7 +4988,7 @@ var Via = class extends PrimitiveComponent2 {
|
|
|
4988
4988
|
const connectedNetOrTrace = this._getConnectedNetOrTrace();
|
|
4989
4989
|
const sourceTraceId = this.source_trace_id ?? (connectedNetOrTrace instanceof Net ? void 0 : connectedNetOrTrace?.source_trace_id);
|
|
4990
4990
|
const sourceNetId = !sourceTraceId && connectedNetOrTrace instanceof Net ? connectedNetOrTrace.source_net_id : void 0;
|
|
4991
|
-
const
|
|
4991
|
+
const pcb_via3 = db.pcb_via.insert({
|
|
4992
4992
|
x: position.x,
|
|
4993
4993
|
y: position.y,
|
|
4994
4994
|
hole_diameter: holeDiameter,
|
|
@@ -5003,7 +5003,7 @@ var Via = class extends PrimitiveComponent2 {
|
|
|
5003
5003
|
...sourceTraceId ? { source_trace_id: sourceTraceId } : {},
|
|
5004
5004
|
...sourceNetId ? { source_net_id: sourceNetId } : {}
|
|
5005
5005
|
});
|
|
5006
|
-
this.pcb_via_id =
|
|
5006
|
+
this.pcb_via_id = pcb_via3.pcb_via_id;
|
|
5007
5007
|
}
|
|
5008
5008
|
};
|
|
5009
5009
|
|
|
@@ -5185,6 +5185,11 @@ function Trace__findConnectedPorts(trace) {
|
|
|
5185
5185
|
};
|
|
5186
5186
|
}
|
|
5187
5187
|
|
|
5188
|
+
// lib/components/primitive-components/Trace/Trace_doInitialPcbManualTraceRender.ts
|
|
5189
|
+
import {
|
|
5190
|
+
pcb_via
|
|
5191
|
+
} from "circuit-json";
|
|
5192
|
+
|
|
5188
5193
|
// lib/components/primitive-components/Trace/trace-utils/compute-trace-length.ts
|
|
5189
5194
|
function getTraceLength(route) {
|
|
5190
5195
|
let totalLength = 0;
|
|
@@ -5495,7 +5500,7 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
5495
5500
|
}
|
|
5496
5501
|
const width = trace._getExplicitTraceThickness() ?? trace.getSubcircuit()._parsedProps.minTraceWidth ?? jlcMinTolerances.min_trace_width;
|
|
5497
5502
|
if (inflatedPcbTraces.length > 0) {
|
|
5498
|
-
const { maybeFlipLayer } = trace._getPcbPrimitiveFlippedHelpers();
|
|
5503
|
+
const { isFlipped, maybeFlipLayer } = trace._getPcbPrimitiveFlippedHelpers();
|
|
5499
5504
|
const transform2 = trace._computePcbGlobalTransformBeforeLayout();
|
|
5500
5505
|
const insertedRoutes = [];
|
|
5501
5506
|
const subcircuitConnectivityMapKey2 = trace.subcircuit_connectivity_map_key ?? db.source_trace.get(trace.source_trace_id)?.subcircuit_connectivity_map_key;
|
|
@@ -5541,10 +5546,11 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
5541
5546
|
const point6 = transformedRoute[index];
|
|
5542
5547
|
if (point6.route_type === "via") {
|
|
5543
5548
|
const originalPoint = inflatedPcbTrace.route[index];
|
|
5544
|
-
const
|
|
5549
|
+
const originalPcbVia = findInflatedPcbViaForPoint(
|
|
5545
5550
|
trace._inflatedPcbVias,
|
|
5546
5551
|
originalPoint
|
|
5547
5552
|
);
|
|
5553
|
+
const inflatedPcbVia = originalPcbVia ? pcb_via.parse(originalPcbVia) : void 0;
|
|
5548
5554
|
const routePointViaDiameter = getViaDiameterFromRoutePoint(point6);
|
|
5549
5555
|
const fromLayer = maybeFlipLayer(
|
|
5550
5556
|
inflatedPcbVia?.from_layer ?? point6.from_layer
|
|
@@ -5571,7 +5577,9 @@ function Trace_doInitialPcbManualTraceRender(trace) {
|
|
|
5571
5577
|
subcircuit_connectivity_map_key: inflatedPcbVia?.subcircuit_connectivity_map_key ?? subcircuitConnectivityMapKey2,
|
|
5572
5578
|
net_is_assignable: inflatedPcbVia?.net_is_assignable,
|
|
5573
5579
|
net_assigned: inflatedPcbVia?.net_assigned,
|
|
5574
|
-
|
|
5580
|
+
// Use the same footprint flip as the route and via layers above.
|
|
5581
|
+
tented_on_top: isFlipped ? inflatedPcbVia?.tented_on_bottom : inflatedPcbVia?.tented_on_top,
|
|
5582
|
+
tented_on_bottom: isFlipped ? inflatedPcbVia?.tented_on_top : inflatedPcbVia?.tented_on_bottom
|
|
5575
5583
|
});
|
|
5576
5584
|
}
|
|
5577
5585
|
}
|
|
@@ -8003,6 +8011,9 @@ var underscorifyPortArrangement = (portArrangement) => {
|
|
|
8003
8011
|
|
|
8004
8012
|
// lib/utils/createComponentsFromCircuitJson.ts
|
|
8005
8013
|
import { getUnitVectorFromDirection as getUnitVectorFromDirection2 } from "@tscircuit/math-utils";
|
|
8014
|
+
import {
|
|
8015
|
+
pcb_via as pcb_via2
|
|
8016
|
+
} from "circuit-json";
|
|
8006
8017
|
|
|
8007
8018
|
// lib/utils/normalizeTextForCircuitJson.ts
|
|
8008
8019
|
function normalizeTextForCircuitJson(text) {
|
|
@@ -9455,7 +9466,10 @@ import {
|
|
|
9455
9466
|
import { z as z8 } from "zod";
|
|
9456
9467
|
var pcbViaProps = viaProps2.extend({
|
|
9457
9468
|
layers: z8.array(layer_ref).optional(),
|
|
9458
|
-
|
|
9469
|
+
/** @deprecated Use tentedOnTop and tentedOnBottom instead. */
|
|
9470
|
+
isTented: z8.boolean().optional(),
|
|
9471
|
+
tentedOnTop: z8.boolean().optional(),
|
|
9472
|
+
tentedOnBottom: z8.boolean().optional()
|
|
9459
9473
|
}).partial({
|
|
9460
9474
|
fromLayer: true,
|
|
9461
9475
|
toLayer: true
|
|
@@ -9514,10 +9528,17 @@ var PcbVia = class extends PrimitiveComponent2 {
|
|
|
9514
9528
|
doInitialPcbPrimitiveRender() {
|
|
9515
9529
|
if (this.root?.pcbDisabled) return;
|
|
9516
9530
|
const { db } = this.root;
|
|
9517
|
-
const {
|
|
9531
|
+
const {
|
|
9532
|
+
holeDiameter,
|
|
9533
|
+
outerDiameter,
|
|
9534
|
+
netIsAssignable,
|
|
9535
|
+
isTented,
|
|
9536
|
+
tentedOnTop,
|
|
9537
|
+
tentedOnBottom
|
|
9538
|
+
} = this._parsedProps;
|
|
9518
9539
|
const subcircuit = this.getSubcircuit();
|
|
9519
9540
|
const position = this._getGlobalPcbPositionBeforeLayout();
|
|
9520
|
-
const { maybeFlipLayer } = this._getPcbPrimitiveFlippedHelpers();
|
|
9541
|
+
const { isFlipped, maybeFlipLayer } = this._getPcbPrimitiveFlippedHelpers();
|
|
9521
9542
|
const layers = this._getLayers().map(
|
|
9522
9543
|
(layer) => maybeFlipLayer(layer)
|
|
9523
9544
|
);
|
|
@@ -9535,7 +9556,9 @@ var PcbVia = class extends PrimitiveComponent2 {
|
|
|
9535
9556
|
subcircuit_id: subcircuit?.subcircuit_id ?? void 0,
|
|
9536
9557
|
pcb_group_id: this.getGroup()?.pcb_group_id ?? void 0,
|
|
9537
9558
|
net_is_assignable: netIsAssignable,
|
|
9538
|
-
|
|
9559
|
+
// Use the same footprint flip as the via layers above.
|
|
9560
|
+
tented_on_top: (isFlipped ? tentedOnBottom : tentedOnTop) ?? isTented,
|
|
9561
|
+
tented_on_bottom: (isFlipped ? tentedOnTop : tentedOnBottom) ?? isTented
|
|
9539
9562
|
});
|
|
9540
9563
|
this.pcb_via_id = pcbVia.pcb_via_id;
|
|
9541
9564
|
}
|
|
@@ -12028,6 +12051,7 @@ var createComponentsFromCircuitJson = ({
|
|
|
12028
12051
|
})
|
|
12029
12052
|
);
|
|
12030
12053
|
} else if (elm.type === "pcb_via") {
|
|
12054
|
+
const via = pcb_via2.parse(elm);
|
|
12031
12055
|
const layers = elm.layers ?? [];
|
|
12032
12056
|
const pcbVia = new PcbVia({
|
|
12033
12057
|
pcbX: elm.x,
|
|
@@ -12038,7 +12062,8 @@ var createComponentsFromCircuitJson = ({
|
|
|
12038
12062
|
toLayer: elm.to_layer ?? layers[layers.length - 1],
|
|
12039
12063
|
layers,
|
|
12040
12064
|
netIsAssignable: elm.net_is_assignable,
|
|
12041
|
-
|
|
12065
|
+
tentedOnTop: via.tented_on_top,
|
|
12066
|
+
tentedOnBottom: via.tented_on_bottom
|
|
12042
12067
|
});
|
|
12043
12068
|
pcbVia._importedPcbTraceId = elm.pcb_trace_id;
|
|
12044
12069
|
components.push(pcbVia);
|
|
@@ -26555,6 +26580,7 @@ function normalizeFanoutPlanCorners(params) {
|
|
|
26555
26580
|
if (new Set(params.plans.map((p) => p.connectionIndex)).size !== params.plans.length)
|
|
26556
26581
|
return null;
|
|
26557
26582
|
let plans = [...params.plans];
|
|
26583
|
+
let repairedSourceCorners = false;
|
|
26558
26584
|
if (params.repairPlaneSourceCorners || params.repairSignalSourceCorners) {
|
|
26559
26585
|
for (let index = 0; index < plans.length; index++) {
|
|
26560
26586
|
const plan = plans[index];
|
|
@@ -26575,8 +26601,14 @@ function normalizeFanoutPlanCorners(params) {
|
|
|
26575
26601
|
);
|
|
26576
26602
|
if (!normalized) return null;
|
|
26577
26603
|
plans[index] = normalized;
|
|
26604
|
+
repairedSourceCorners = true;
|
|
26578
26605
|
}
|
|
26579
26606
|
}
|
|
26607
|
+
if (repairedSourceCorners && params.rematchRepairedLengths) {
|
|
26608
|
+
const rematched = params.rematchRepairedLengths(plans);
|
|
26609
|
+
if (!rematched) return null;
|
|
26610
|
+
plans = rematched;
|
|
26611
|
+
}
|
|
26580
26612
|
const sourceNormalizedPlans = [...plans];
|
|
26581
26613
|
const pairs3 = getDeclaredDifferentialPairs(params.inputSrj);
|
|
26582
26614
|
for (const plan of plans) {
|
|
@@ -33338,6 +33370,90 @@ function buildOutputSimpleRouteJson(params) {
|
|
|
33338
33370
|
};
|
|
33339
33371
|
}
|
|
33340
33372
|
|
|
33373
|
+
// node_modules/@tscircuit/fanout-solver/lib/dense-boundary-routing-policy.ts
|
|
33374
|
+
var minimumJointBoundaryBusCount = 5;
|
|
33375
|
+
var maximumJointBoundaryBusCount = 40;
|
|
33376
|
+
var maximumJointBoundaryConnectionCount = 64;
|
|
33377
|
+
var minimumLargeBoundaryOnlyBusCount = 10;
|
|
33378
|
+
var minimumMixedRoutingPlaneBusCount = 8;
|
|
33379
|
+
function shouldUseJointBoundaryViaReservation(boundaryBusConnectionCounts) {
|
|
33380
|
+
const boundaryBusCount = boundaryBusConnectionCounts.length;
|
|
33381
|
+
const boundaryConnectionCount = boundaryBusConnectionCounts.reduce(
|
|
33382
|
+
(sum, count) => sum + count,
|
|
33383
|
+
0
|
|
33384
|
+
);
|
|
33385
|
+
return boundaryBusCount >= minimumJointBoundaryBusCount && boundaryBusCount <= maximumJointBoundaryBusCount && boundaryConnectionCount <= maximumJointBoundaryConnectionCount || boundaryBusCount === 4 && new Set(boundaryBusConnectionCounts).size > 1;
|
|
33386
|
+
}
|
|
33387
|
+
function getDenseBoundaryRoutingMode({
|
|
33388
|
+
boundaryBusConnectionCounts,
|
|
33389
|
+
planeBusCount
|
|
33390
|
+
}) {
|
|
33391
|
+
const boundaryBusCount = boundaryBusConnectionCounts.length;
|
|
33392
|
+
if (boundaryBusCount <= minimumLargeBoundaryOnlyBusCount - 1 && planeBusCount >= minimumMixedRoutingPlaneBusCount) {
|
|
33393
|
+
return "mixed_with_planes";
|
|
33394
|
+
}
|
|
33395
|
+
if (boundaryBusCount >= minimumLargeBoundaryOnlyBusCount && planeBusCount === 0 && shouldUseJointBoundaryViaReservation(boundaryBusConnectionCounts)) {
|
|
33396
|
+
return "large_boundary_only";
|
|
33397
|
+
}
|
|
33398
|
+
return null;
|
|
33399
|
+
}
|
|
33400
|
+
function getAverageBusBoundaryTargetTrack(bus) {
|
|
33401
|
+
if (!bus.exitEdge) {
|
|
33402
|
+
throw new Error(
|
|
33403
|
+
`Cannot order boundary bus ${bus.busId} without an exit edge`
|
|
33404
|
+
);
|
|
33405
|
+
}
|
|
33406
|
+
const boundaryDirection = getDirectionForExitEdge(bus.exitEdge);
|
|
33407
|
+
return bus.connections.reduce(
|
|
33408
|
+
(sum, connection) => sum + getBoundaryTargetTrack({ bus, connection, boundaryDirection }),
|
|
33409
|
+
0
|
|
33410
|
+
) / bus.connections.length;
|
|
33411
|
+
}
|
|
33412
|
+
function orderDenseBoundaryBusesForRouting({
|
|
33413
|
+
busesInRoutingOrder,
|
|
33414
|
+
busLayerAssignments,
|
|
33415
|
+
routingMode
|
|
33416
|
+
}) {
|
|
33417
|
+
if (routingMode !== "large_boundary_only") return [...busesInRoutingOrder];
|
|
33418
|
+
const singletonBuses = busesInRoutingOrder.filter(
|
|
33419
|
+
(bus) => bus.connections.length === 1
|
|
33420
|
+
);
|
|
33421
|
+
if (new Set(singletonBuses.map((bus) => bus.exitEdge)).size !== 1) {
|
|
33422
|
+
return [...busesInRoutingOrder];
|
|
33423
|
+
}
|
|
33424
|
+
const nonSingletonBuses = [
|
|
33425
|
+
...busesInRoutingOrder.filter((bus) => bus.connections.length >= 8).toSorted(
|
|
33426
|
+
(first, second) => getAverageBusBoundaryTargetTrack(second) - getAverageBusBoundaryTargetTrack(first)
|
|
33427
|
+
),
|
|
33428
|
+
...busesInRoutingOrder.filter(
|
|
33429
|
+
(bus) => bus.connections.length > 1 && bus.connections.length < 8
|
|
33430
|
+
)
|
|
33431
|
+
];
|
|
33432
|
+
const singletonLayerGroups = [];
|
|
33433
|
+
for (const bus of singletonBuses) {
|
|
33434
|
+
const targetLayer2 = busLayerAssignments[bus.busId];
|
|
33435
|
+
if (!targetLayer2) {
|
|
33436
|
+
throw new Error(`Cannot order boundary bus ${bus.busId} without a layer`);
|
|
33437
|
+
}
|
|
33438
|
+
let singletonLayerGroup = singletonLayerGroups.find(
|
|
33439
|
+
(candidate) => candidate.targetLayer === targetLayer2
|
|
33440
|
+
);
|
|
33441
|
+
if (!singletonLayerGroup) {
|
|
33442
|
+
singletonLayerGroup = { targetLayer: targetLayer2, buses: [] };
|
|
33443
|
+
singletonLayerGroups.push(singletonLayerGroup);
|
|
33444
|
+
}
|
|
33445
|
+
singletonLayerGroup.buses.push(bus);
|
|
33446
|
+
}
|
|
33447
|
+
return [
|
|
33448
|
+
...nonSingletonBuses,
|
|
33449
|
+
...singletonLayerGroups.flatMap(
|
|
33450
|
+
(singletonLayerGroup) => singletonLayerGroup.buses.toSorted(
|
|
33451
|
+
(first, second) => getAverageBusBoundaryTargetTrack(second) - getAverageBusBoundaryTargetTrack(first)
|
|
33452
|
+
)
|
|
33453
|
+
)
|
|
33454
|
+
];
|
|
33455
|
+
}
|
|
33456
|
+
|
|
33341
33457
|
// node_modules/@tscircuit/fanout-solver/lib/source-pad-reentry.ts
|
|
33342
33458
|
var EPSILON15 = 1e-7;
|
|
33343
33459
|
function getSourcePadReentries(plan, clearance) {
|
|
@@ -43740,9 +43856,6 @@ function busUsesCoordinatedWinding(bus) {
|
|
|
43740
43856
|
)
|
|
43741
43857
|
);
|
|
43742
43858
|
}
|
|
43743
|
-
function shouldUseJointBoundaryViaReservation(boundaryBusConnectionCounts) {
|
|
43744
|
-
return boundaryBusConnectionCounts.length === 5 || boundaryBusConnectionCounts.length === 6 || boundaryBusConnectionCounts.length === 7 || boundaryBusConnectionCounts.length === 8 || boundaryBusConnectionCounts.length === 9 || boundaryBusConnectionCounts.length === 4 && new Set(boundaryBusConnectionCounts).size > 1;
|
|
43745
|
-
}
|
|
43746
43859
|
function shouldDeferSingletonBoundaryViaReservation(boundaryBusConnectionCounts) {
|
|
43747
43860
|
const boundaryBusCount = boundaryBusConnectionCounts.length;
|
|
43748
43861
|
const singletonBusCount = boundaryBusConnectionCounts.filter(
|
|
@@ -44813,13 +44926,20 @@ var FanoutSolver = class extends BaseSolver {
|
|
|
44813
44926
|
const unroutablePlaneBusIds = /* @__PURE__ */ new Set();
|
|
44814
44927
|
let failedBoundaryBus;
|
|
44815
44928
|
let failedWideBoundaryBus;
|
|
44929
|
+
const boundaryBusConnectionCounts = boundaryBuses.map(
|
|
44930
|
+
(bus) => bus.connections.length
|
|
44931
|
+
);
|
|
44932
|
+
const denseBoundaryRoutingMode = getDenseBoundaryRoutingMode({
|
|
44933
|
+
boundaryBusConnectionCounts,
|
|
44934
|
+
planeBusCount: planeBuses.length
|
|
44935
|
+
});
|
|
44816
44936
|
debugDense(
|
|
44817
44937
|
"start",
|
|
44818
44938
|
boundaryBuses.map((bus) => `${bus.busId}:${bus.connections.length}`),
|
|
44819
44939
|
`planes:${planeBuses.length}`,
|
|
44820
44940
|
`joint:${useJointBoundaryViaReservation}`
|
|
44821
44941
|
);
|
|
44822
|
-
if (boundaryBuses.length === 0 ||
|
|
44942
|
+
if (boundaryBuses.length === 0 || denseBoundaryRoutingMode === null || boundaryBuses.some((bus) => !busUsesCoordinatedWinding(bus)) || planeBuses.some((bus) => bus.connections.length !== 1) || boundaryBuses.length + planeBuses.length !== params.busesInRoutingOrder.length) {
|
|
44823
44943
|
return null;
|
|
44824
44944
|
}
|
|
44825
44945
|
const connectionNameByIndex = new Map(
|
|
@@ -44829,9 +44949,6 @@ var FanoutSolver = class extends BaseSolver {
|
|
|
44829
44949
|
)
|
|
44830
44950
|
)
|
|
44831
44951
|
);
|
|
44832
|
-
const boundaryBusConnectionCounts = boundaryBuses.map(
|
|
44833
|
-
(bus) => bus.connections.length
|
|
44834
|
-
);
|
|
44835
44952
|
const singletonBoundaryBusCount = boundaryBusConnectionCounts.filter(
|
|
44836
44953
|
(connectionCount) => connectionCount === 1
|
|
44837
44954
|
).length;
|
|
@@ -45132,17 +45249,21 @@ var FanoutSolver = class extends BaseSolver {
|
|
|
45132
45249
|
});
|
|
45133
45250
|
yield;
|
|
45134
45251
|
if (seedViaPoints) {
|
|
45135
|
-
const denseBoundaryBusesInRoutingOrder =
|
|
45136
|
-
|
|
45137
|
-
|
|
45138
|
-
|
|
45139
|
-
|
|
45140
|
-
|
|
45141
|
-
(
|
|
45142
|
-
|
|
45143
|
-
|
|
45144
|
-
|
|
45145
|
-
|
|
45252
|
+
const denseBoundaryBusesInRoutingOrder = orderDenseBoundaryBusesForRouting({
|
|
45253
|
+
busesInRoutingOrder: [
|
|
45254
|
+
...hasForeignAllLayerObstaclesInComponent ? [] : multiLayerLeadingSingletonBuses,
|
|
45255
|
+
...boundaryBuses.filter(
|
|
45256
|
+
(bus) => (hasForeignAllLayerObstaclesInComponent || !multiLayerLeadingSingletonBuses.includes(bus)) && !throughAllLeadingBuses.includes(bus)
|
|
45257
|
+
).flatMap((bus) => [
|
|
45258
|
+
...throughAllLeadingBuses.filter(
|
|
45259
|
+
(candidate) => getContainingWideSourceField(candidate) === bus
|
|
45260
|
+
),
|
|
45261
|
+
bus
|
|
45262
|
+
])
|
|
45263
|
+
],
|
|
45264
|
+
busLayerAssignments: params.busLayerAssignments,
|
|
45265
|
+
routingMode: denseBoundaryRoutingMode
|
|
45266
|
+
});
|
|
45146
45267
|
const allWideBusesExitDirectly = wideBoundaryBuses.every(
|
|
45147
45268
|
(bus) => bus.exitEdge && bus.direction === getDirectionForExitEdge(bus.exitEdge)
|
|
45148
45269
|
);
|
|
@@ -45684,7 +45805,6 @@ var FanoutSolver = class extends BaseSolver {
|
|
|
45684
45805
|
debugDense("route:complete", bus.busId, busPlans.length);
|
|
45685
45806
|
return true;
|
|
45686
45807
|
}.bind(this);
|
|
45687
|
-
const firstBoundaryBus = denseBoundaryBusesInRoutingOrder[0];
|
|
45688
45808
|
const routedBoundaryBuses = [];
|
|
45689
45809
|
const reserveAllPlaneDogbonesAfterFirstWideBus = (bus) => {
|
|
45690
45810
|
if (bus.connections.length >= 8 && !useConfiguredDensePlaneRouting && !useSameNetPlaneCopperStaging && process.env.FANOUT_DEBUG_NO_PLANE_EXPANSION !== "1" && activeBoundaryReservationPlaneBuses.length < planeBuses.length) {
|
|
@@ -45692,23 +45812,32 @@ var FanoutSolver = class extends BaseSolver {
|
|
|
45692
45812
|
debugDense("plane-reservations:expanded", planeBuses.length);
|
|
45693
45813
|
}
|
|
45694
45814
|
};
|
|
45695
|
-
const
|
|
45696
|
-
|
|
45697
|
-
|
|
45698
|
-
|
|
45699
|
-
|
|
45700
|
-
|
|
45701
|
-
|
|
45702
|
-
|
|
45703
|
-
|
|
45704
|
-
|
|
45705
|
-
|
|
45815
|
+
const firstBoundaryCandidates = denseBoundaryRoutingMode === "large_boundary_only" ? denseBoundaryBusesInRoutingOrder : denseBoundaryBusesInRoutingOrder.slice(0, 1);
|
|
45816
|
+
let firstBoundaryBus;
|
|
45817
|
+
for (const candidate of firstBoundaryCandidates) {
|
|
45818
|
+
const candidateRouted = yield* routeMatchedBoundaryBusSteps(candidate);
|
|
45819
|
+
this.setInProgressPlans({
|
|
45820
|
+
phase: "route-dense-boundary-buses",
|
|
45821
|
+
plans: matchedPlans,
|
|
45822
|
+
strategy: "default",
|
|
45823
|
+
unitIndex: ++denseWorkUnitIndex,
|
|
45824
|
+
unitCount: denseWorkUnitCount,
|
|
45825
|
+
busId: candidate.busId
|
|
45826
|
+
});
|
|
45827
|
+
yield;
|
|
45828
|
+
if (!candidateRouted) continue;
|
|
45829
|
+
firstBoundaryBus = candidate;
|
|
45830
|
+
break;
|
|
45831
|
+
}
|
|
45832
|
+
if (firstBoundaryBus) {
|
|
45706
45833
|
routedBoundaryBuses.push(firstBoundaryBus);
|
|
45707
45834
|
reserveAllPlaneDogbonesAfterFirstWideBus(firstBoundaryBus);
|
|
45708
45835
|
} else {
|
|
45709
45836
|
matchedRoutingSucceeded = false;
|
|
45710
45837
|
}
|
|
45711
|
-
const remainingBoundaryBuses = denseBoundaryBusesInRoutingOrder.
|
|
45838
|
+
const remainingBoundaryBuses = denseBoundaryBusesInRoutingOrder.filter(
|
|
45839
|
+
(bus) => bus !== firstBoundaryBus
|
|
45840
|
+
);
|
|
45712
45841
|
while (matchedRoutingSucceeded && remainingBoundaryBuses.length > 0) {
|
|
45713
45842
|
const blockingSegments = matchedPlans.flatMap(
|
|
45714
45843
|
(plan) => plan.segments.map((segment2) => ({
|
|
@@ -61704,7 +61833,7 @@ function Group_getRoutingPhasePlans(group) {
|
|
|
61704
61833
|
var package_default = {
|
|
61705
61834
|
name: "@tscircuit/core",
|
|
61706
61835
|
type: "module",
|
|
61707
|
-
version: "0.0.
|
|
61836
|
+
version: "0.0.1899",
|
|
61708
61837
|
types: "dist/index.d.ts",
|
|
61709
61838
|
main: "dist/index.js",
|
|
61710
61839
|
module: "dist/index.js",
|
|
@@ -61744,7 +61873,7 @@ var package_default = {
|
|
|
61744
61873
|
"@tscircuit/common": "^0.0.20",
|
|
61745
61874
|
"@tscircuit/copper-pour-solver": "^0.0.54",
|
|
61746
61875
|
"@tscircuit/create-fdm-enclosure": "0.0.4",
|
|
61747
|
-
"@tscircuit/fanout-solver": "0.0.
|
|
61876
|
+
"@tscircuit/fanout-solver": "0.0.76",
|
|
61748
61877
|
"@tscircuit/footprinter": "^0.0.426",
|
|
61749
61878
|
"@tscircuit/image-utils": "^0.0.8",
|
|
61750
61879
|
"@tscircuit/implicit-copper-pour-solver": "github:tscircuit/implicit-copper-pour-solver#a5cbbda0cd65fd4707c5c1af25779837c25aba92",
|
|
@@ -61757,7 +61886,7 @@ var package_default = {
|
|
|
61757
61886
|
"@tscircuit/math-utils": "^0.0.36",
|
|
61758
61887
|
"@tscircuit/miniflex": "^0.0.4",
|
|
61759
61888
|
"@tscircuit/ngspice-spice-engine": "^0.0.20",
|
|
61760
|
-
"@tscircuit/props": "^0.0.
|
|
61889
|
+
"@tscircuit/props": "^0.0.653",
|
|
61761
61890
|
"@tscircuit/schematic-match-adapt": "^0.0.18",
|
|
61762
61891
|
"@tscircuit/schematic-trace-solver": "^0.0.191",
|
|
61763
61892
|
"@tscircuit/solver-utils": "^0.0.16",
|
|
@@ -61773,7 +61902,7 @@ var package_default = {
|
|
|
61773
61902
|
"bun-match-svg": "0.0.12",
|
|
61774
61903
|
"calculate-elbow": "^0.0.12",
|
|
61775
61904
|
"chokidar-cli": "^3.0.0",
|
|
61776
|
-
"circuit-json": "^0.0.
|
|
61905
|
+
"circuit-json": "^0.0.487",
|
|
61777
61906
|
"circuit-json-to-bpc": "^0.0.13",
|
|
61778
61907
|
"circuit-json-to-connectivity-map": "^0.0.30",
|
|
61779
61908
|
"circuit-json-to-gltf": "^0.0.124",
|
|
@@ -61836,8 +61965,8 @@ var package_default = {
|
|
|
61836
61965
|
},
|
|
61837
61966
|
overrides: {
|
|
61838
61967
|
"@tscircuit/circuit-json-util": "^0.0.113",
|
|
61839
|
-
"@tscircuit/props": "^0.0.
|
|
61840
|
-
"circuit-json": "^0.0.
|
|
61968
|
+
"@tscircuit/props": "^0.0.653",
|
|
61969
|
+
"circuit-json": "^0.0.487"
|
|
61841
61970
|
}
|
|
61842
61971
|
};
|
|
61843
61972
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tscircuit/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.1900",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@tscircuit/common": "^0.0.20",
|
|
42
42
|
"@tscircuit/copper-pour-solver": "^0.0.54",
|
|
43
43
|
"@tscircuit/create-fdm-enclosure": "0.0.4",
|
|
44
|
-
"@tscircuit/fanout-solver": "0.0.
|
|
44
|
+
"@tscircuit/fanout-solver": "0.0.76",
|
|
45
45
|
"@tscircuit/footprinter": "^0.0.426",
|
|
46
46
|
"@tscircuit/image-utils": "^0.0.8",
|
|
47
47
|
"@tscircuit/implicit-copper-pour-solver": "github:tscircuit/implicit-copper-pour-solver#a5cbbda0cd65fd4707c5c1af25779837c25aba92",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@tscircuit/math-utils": "^0.0.36",
|
|
55
55
|
"@tscircuit/miniflex": "^0.0.4",
|
|
56
56
|
"@tscircuit/ngspice-spice-engine": "^0.0.20",
|
|
57
|
-
"@tscircuit/props": "^0.0.
|
|
57
|
+
"@tscircuit/props": "^0.0.653",
|
|
58
58
|
"@tscircuit/schematic-match-adapt": "^0.0.18",
|
|
59
59
|
"@tscircuit/schematic-trace-solver": "^0.0.191",
|
|
60
60
|
"@tscircuit/solver-utils": "^0.0.16",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"bun-match-svg": "0.0.12",
|
|
71
71
|
"calculate-elbow": "^0.0.12",
|
|
72
72
|
"chokidar-cli": "^3.0.0",
|
|
73
|
-
"circuit-json": "^0.0.
|
|
73
|
+
"circuit-json": "^0.0.487",
|
|
74
74
|
"circuit-json-to-bpc": "^0.0.13",
|
|
75
75
|
"circuit-json-to-connectivity-map": "^0.0.30",
|
|
76
76
|
"circuit-json-to-gltf": "^0.0.124",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
},
|
|
134
134
|
"overrides": {
|
|
135
135
|
"@tscircuit/circuit-json-util": "^0.0.113",
|
|
136
|
-
"@tscircuit/props": "^0.0.
|
|
137
|
-
"circuit-json": "^0.0.
|
|
136
|
+
"@tscircuit/props": "^0.0.653",
|
|
137
|
+
"circuit-json": "^0.0.487"
|
|
138
138
|
}
|
|
139
139
|
}
|