@tobisk/pcbs 1.0.0
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/LICENSE.md +21 -0
- package/README.md +186 -0
- package/dist/src/cli/cli.d.ts +6 -0
- package/dist/src/cli/cli.js +87 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/codegen.d.ts +25 -0
- package/dist/src/cli/codegen.js +170 -0
- package/dist/src/cli/codegen.js.map +1 -0
- package/dist/src/cli/commands/export.d.ts +13 -0
- package/dist/src/cli/commands/export.js +301 -0
- package/dist/src/cli/commands/export.js.map +1 -0
- package/dist/src/cli/commands/lib.d.ts +10 -0
- package/dist/src/cli/commands/lib.js +158 -0
- package/dist/src/cli/commands/lib.js.map +1 -0
- package/dist/src/cli/commands/parts.d.ts +4 -0
- package/dist/src/cli/commands/parts.js +104 -0
- package/dist/src/cli/commands/parts.js.map +1 -0
- package/dist/src/cli/commands/setup.d.ts +4 -0
- package/dist/src/cli/commands/setup.js +86 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/commands/synth.d.ts +4 -0
- package/dist/src/cli/commands/synth.js +75 -0
- package/dist/src/cli/commands/synth.js.map +1 -0
- package/dist/src/cli/commands/types.d.ts +1 -0
- package/dist/src/cli/commands/types.js +140 -0
- package/dist/src/cli/commands/types.js.map +1 -0
- package/dist/src/cli/commands/validate.d.ts +5 -0
- package/dist/src/cli/commands/validate.js +105 -0
- package/dist/src/cli/commands/validate.js.map +1 -0
- package/dist/src/cli/config.d.ts +9 -0
- package/dist/src/cli/config.js +80 -0
- package/dist/src/cli/config.js.map +1 -0
- package/dist/src/cli/env.d.ts +4 -0
- package/dist/src/cli/env.js +166 -0
- package/dist/src/cli/env.js.map +1 -0
- package/dist/src/cli/search-jlc.d.ts +0 -0
- package/dist/src/cli/search-jlc.js +23 -0
- package/dist/src/cli/search-jlc.js.map +1 -0
- package/dist/src/cli/synthesis.d.ts +11 -0
- package/dist/src/cli/synthesis.js +120 -0
- package/dist/src/cli/synthesis.js.map +1 -0
- package/dist/src/cli/utils/bom.d.ts +19 -0
- package/dist/src/cli/utils/bom.js +130 -0
- package/dist/src/cli/utils/bom.js.map +1 -0
- package/dist/src/cli/utils/cpl.d.ts +18 -0
- package/dist/src/cli/utils/cpl.js +101 -0
- package/dist/src/cli/utils/cpl.js.map +1 -0
- package/dist/src/cli/utils.d.ts +11 -0
- package/dist/src/cli/utils.js +136 -0
- package/dist/src/cli/utils.js.map +1 -0
- package/dist/src/generate-kicad-types.d.ts +1 -0
- package/dist/src/generate-kicad-types.js +137 -0
- package/dist/src/generate-kicad-types.js.map +1 -0
- package/dist/src/synth/3d/Kicad3DModel.d.ts +81 -0
- package/dist/src/synth/3d/Kicad3DModel.js +250 -0
- package/dist/src/synth/3d/Kicad3DModel.js.map +1 -0
- package/dist/src/synth/3d/booleans.d.ts +10 -0
- package/dist/src/synth/3d/booleans.js +30 -0
- package/dist/src/synth/3d/booleans.js.map +1 -0
- package/dist/src/synth/3d/fillet.d.ts +14 -0
- package/dist/src/synth/3d/fillet.js +47 -0
- package/dist/src/synth/3d/fillet.js.map +1 -0
- package/dist/src/synth/3d/index.d.ts +7 -0
- package/dist/src/synth/3d/index.js +14 -0
- package/dist/src/synth/3d/index.js.map +1 -0
- package/dist/src/synth/3d/occ-loader.d.ts +5 -0
- package/dist/src/synth/3d/occ-loader.js +77 -0
- package/dist/src/synth/3d/occ-loader.js.map +1 -0
- package/dist/src/synth/3d/occ.d.ts +3 -0
- package/dist/src/synth/3d/occ.js +31 -0
- package/dist/src/synth/3d/occ.js.map +1 -0
- package/dist/src/synth/3d/primitives.d.ts +38 -0
- package/dist/src/synth/3d/primitives.js +58 -0
- package/dist/src/synth/3d/primitives.js.map +1 -0
- package/dist/src/synth/3d/stepWriter.d.ts +7 -0
- package/dist/src/synth/3d/stepWriter.js +72 -0
- package/dist/src/synth/3d/stepWriter.js.map +1 -0
- package/dist/src/synth/3d/transforms.d.ts +18 -0
- package/dist/src/synth/3d/transforms.js +74 -0
- package/dist/src/synth/3d/transforms.js.map +1 -0
- package/dist/src/synth/3d/types.d.ts +54 -0
- package/dist/src/synth/3d/types.js +21 -0
- package/dist/src/synth/3d/types.js.map +1 -0
- package/dist/src/synth/3d/vrmlWriter.d.ts +5 -0
- package/dist/src/synth/3d/vrmlWriter.js +171 -0
- package/dist/src/synth/3d/vrmlWriter.js.map +1 -0
- package/dist/src/synth/Component.d.ts +67 -0
- package/dist/src/synth/Component.js +185 -0
- package/dist/src/synth/Component.js.map +1 -0
- package/dist/src/synth/Composable.d.ts +73 -0
- package/dist/src/synth/Composable.js +128 -0
- package/dist/src/synth/Composable.js.map +1 -0
- package/dist/src/synth/KicadFootprint.d.ts +97 -0
- package/dist/src/synth/KicadFootprint.js +312 -0
- package/dist/src/synth/KicadFootprint.js.map +1 -0
- package/dist/src/synth/KicadLibrary.d.ts +66 -0
- package/dist/src/synth/KicadLibrary.js +162 -0
- package/dist/src/synth/KicadLibrary.js.map +1 -0
- package/dist/src/synth/KicadSymbol.d.ts +71 -0
- package/dist/src/synth/KicadSymbol.js +190 -0
- package/dist/src/synth/KicadSymbol.js.map +1 -0
- package/dist/src/synth/Layout.d.ts +37 -0
- package/dist/src/synth/Layout.js +58 -0
- package/dist/src/synth/Layout.js.map +1 -0
- package/dist/src/synth/Markers.d.ts +35 -0
- package/dist/src/synth/Markers.js +48 -0
- package/dist/src/synth/Markers.js.map +1 -0
- package/dist/src/synth/Module.d.ts +56 -0
- package/dist/src/synth/Module.js +65 -0
- package/dist/src/synth/Module.js.map +1 -0
- package/dist/src/synth/Net.d.ts +23 -0
- package/dist/src/synth/Net.js +95 -0
- package/dist/src/synth/Net.js.map +1 -0
- package/dist/src/synth/Registry.d.ts +36 -0
- package/dist/src/synth/Registry.js +75 -0
- package/dist/src/synth/Registry.js.map +1 -0
- package/dist/src/synth/Schematic.d.ts +36 -0
- package/dist/src/synth/Schematic.js +51 -0
- package/dist/src/synth/Schematic.js.map +1 -0
- package/dist/src/synth/index.d.ts +21 -0
- package/dist/src/synth/index.js +46 -0
- package/dist/src/synth/index.js.map +1 -0
- package/dist/src/synth/kicad-types-placeholder.d.ts +6 -0
- package/dist/src/synth/kicad-types-placeholder.js +7 -0
- package/dist/src/synth/kicad-types-placeholder.js.map +1 -0
- package/dist/src/synth/types.d.ts +111 -0
- package/dist/src/synth/types.js +23 -0
- package/dist/src/synth/types.js.map +1 -0
- package/dist/src/tests/3d-model.test.d.ts +1 -0
- package/dist/src/tests/3d-model.test.js +282 -0
- package/dist/src/tests/3d-model.test.js.map +1 -0
- package/dist/src/tests/codegen.test.d.ts +1 -0
- package/dist/src/tests/codegen.test.js +80 -0
- package/dist/src/tests/codegen.test.js.map +1 -0
- package/dist/src/tests/dmx_node.test.d.ts +1 -0
- package/dist/src/tests/dmx_node.test.js +42 -0
- package/dist/src/tests/dmx_node.test.js.map +1 -0
- package/dist/src/tests/dnc.test.d.ts +1 -0
- package/dist/src/tests/dnc.test.js +100 -0
- package/dist/src/tests/dnc.test.js.map +1 -0
- package/dist/src/tests/kicad-lib.test.d.ts +1 -0
- package/dist/src/tests/kicad-lib.test.js +465 -0
- package/dist/src/tests/kicad-lib.test.js.map +1 -0
- package/dist/src/tests/layout.test.d.ts +1 -0
- package/dist/src/tests/layout.test.js +92 -0
- package/dist/src/tests/layout.test.js.map +1 -0
- package/dist/src/tests/migration.test.d.ts +1 -0
- package/dist/src/tests/migration.test.js +58 -0
- package/dist/src/tests/migration.test.js.map +1 -0
- package/dist/src/tests/net_merging.test.d.ts +1 -0
- package/dist/src/tests/net_merging.test.js +97 -0
- package/dist/src/tests/net_merging.test.js.map +1 -0
- package/dist/src/tests/occ-minimal.test.d.ts +1 -0
- package/dist/src/tests/occ-minimal.test.js +14 -0
- package/dist/src/tests/occ-minimal.test.js.map +1 -0
- package/dist/src/tests/placement.test.d.ts +1 -0
- package/dist/src/tests/placement.test.js +130 -0
- package/dist/src/tests/placement.test.js.map +1 -0
- package/dist/src/tests/synthesis.test.d.ts +1 -0
- package/dist/src/tests/synthesis.test.js +88 -0
- package/dist/src/tests/synthesis.test.js.map +1 -0
- package/dist/src/types/kicad-library.d.ts +6 -0
- package/dist/src/types/kicad-library.js +7 -0
- package/dist/src/types/kicad-library.js.map +1 -0
- package/dist/src/types/kicad-library.ts +61770 -0
- package/package.json +57 -0
- package/scripts/patch-opencascade.ts +18 -0
- package/scripts/wasm-stub.js +1 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Net = void 0;
|
|
4
|
+
const Registry_1 = require("./Registry");
|
|
5
|
+
/**
|
|
6
|
+
* Represents an electrical net (connection) in a circuit.
|
|
7
|
+
*
|
|
8
|
+
* Nets connect component pins together. Use `tie()` to connect a pin to this net.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const vcc = new Net({ name: "VCC_3V3", class: "Power" });
|
|
13
|
+
* vcc.tie(component.pins.VCC);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
class Net {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
/** All pins connected to this net */
|
|
19
|
+
this._pins = [];
|
|
20
|
+
this.name = options.name;
|
|
21
|
+
this.class = options.class ?? "Signal";
|
|
22
|
+
Registry_1.registry.registerNet(this);
|
|
23
|
+
}
|
|
24
|
+
/** Connect a pin (or another net's pin reference) to this net */
|
|
25
|
+
tie(pinOrNet) {
|
|
26
|
+
if (pinOrNet === null || pinOrNet === undefined)
|
|
27
|
+
return;
|
|
28
|
+
let otherNet = null;
|
|
29
|
+
let pin = null;
|
|
30
|
+
if (pinOrNet instanceof Net) {
|
|
31
|
+
if (pinOrNet === this)
|
|
32
|
+
return;
|
|
33
|
+
otherNet = pinOrNet;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
pin = pinOrNet;
|
|
37
|
+
if (pin.net === this)
|
|
38
|
+
return;
|
|
39
|
+
if (pin.net) {
|
|
40
|
+
otherNet = pin.net;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (otherNet) {
|
|
44
|
+
// Check if merging these nets would violate DNC rules
|
|
45
|
+
const thisIsDnc = this._pins.some(p => p.component.symbol === "Device:DNC");
|
|
46
|
+
const otherIsDnc = otherNet.pins.some(p => p.component.symbol === "Device:DNC");
|
|
47
|
+
if (thisIsDnc || otherIsDnc) {
|
|
48
|
+
const thisHasFunctional = this._pins.some(p => p.component.symbol !== "Device:DNC");
|
|
49
|
+
const otherHasFunctional = otherNet.pins.some(p => p.component.symbol !== "Device:DNC");
|
|
50
|
+
if ((thisIsDnc && otherHasFunctional) || (otherIsDnc && thisHasFunctional)) {
|
|
51
|
+
throw new Error(`Cannot merge nets: one is a DNC (Do Not Connect) net and the other has functional connections.`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Merge: transfer all pins from otherNet to this net
|
|
55
|
+
const otherPins = [...otherNet.pins];
|
|
56
|
+
for (const p of otherPins) {
|
|
57
|
+
p._setNet(this);
|
|
58
|
+
if (!this._pins.includes(p)) {
|
|
59
|
+
this._pins.push(p);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Remove the old net from registry
|
|
63
|
+
Registry_1.registry.unregisterNet(otherNet);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// If we reach here, we are tying a single pin that doesn't have a net yet
|
|
67
|
+
if (!pin)
|
|
68
|
+
return;
|
|
69
|
+
// Check DNC rule for single pin connection
|
|
70
|
+
const isDncPin = pin.component.symbol === "Device:DNC";
|
|
71
|
+
const dncPins = this._pins.filter(p => p.component.symbol === "Device:DNC");
|
|
72
|
+
const functionalPins = this._pins.filter(p => p.component.symbol !== "Device:DNC");
|
|
73
|
+
if (isDncPin) {
|
|
74
|
+
if (functionalPins.length > 1) {
|
|
75
|
+
throw new Error(`Cannot connect DNC pin to net "${this.name}" because it has multiple functional connections.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (dncPins.length > 0 && functionalPins.length > 0) {
|
|
80
|
+
throw new Error(`Cannot connect pin "${pin.component.ref}.${pin.name}" to net "${this.name}" because it already has a functional connection and is marked as DNC.`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Update the pin and add it to our list.
|
|
84
|
+
pin._setNet(this);
|
|
85
|
+
if (!this._pins.includes(pin)) {
|
|
86
|
+
this._pins.push(pin);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Get all pins connected to this net (read-only) */
|
|
90
|
+
get pins() {
|
|
91
|
+
return this._pins;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.Net = Net;
|
|
95
|
+
//# sourceMappingURL=Net.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Net.js","sourceRoot":"","sources":["../../../src/synth/Net.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Registry
|
|
3
|
+
*
|
|
4
|
+
* Tracks all components and nets created during schematic generation.
|
|
5
|
+
*/
|
|
6
|
+
import type { Component } from "./Component";
|
|
7
|
+
import type { Net } from "./Net";
|
|
8
|
+
export declare class Registry {
|
|
9
|
+
private components;
|
|
10
|
+
private composables;
|
|
11
|
+
private nets;
|
|
12
|
+
private items;
|
|
13
|
+
private active;
|
|
14
|
+
/** Start tracking. Clear any previous state. */
|
|
15
|
+
start(): void;
|
|
16
|
+
/** Stop tracking. */
|
|
17
|
+
stop(): void;
|
|
18
|
+
/** Register a component. */
|
|
19
|
+
registerComponent(comp: Component<any>): void;
|
|
20
|
+
/** Register a composable. */
|
|
21
|
+
registerComposable(composable: any): void;
|
|
22
|
+
/** Register a net. */
|
|
23
|
+
registerNet(net: Net): void;
|
|
24
|
+
/** Unregister a net (e.g. during merging). */
|
|
25
|
+
unregisterNet(net: Net): void;
|
|
26
|
+
/** Get all registered components. */
|
|
27
|
+
getComponents(): Component<any>[];
|
|
28
|
+
/** Get all registered composables. */
|
|
29
|
+
getComposables(): any[];
|
|
30
|
+
/** Get all registered items in order. */
|
|
31
|
+
getItems(): any[];
|
|
32
|
+
/** Get all registered nets. */
|
|
33
|
+
getNets(): Net[];
|
|
34
|
+
}
|
|
35
|
+
/** Global registry instance. */
|
|
36
|
+
export declare const registry: Registry;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Circuit Registry
|
|
4
|
+
*
|
|
5
|
+
* Tracks all components and nets created during schematic generation.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.registry = exports.Registry = void 0;
|
|
9
|
+
class Registry {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.components = [];
|
|
12
|
+
this.composables = [];
|
|
13
|
+
this.nets = [];
|
|
14
|
+
this.items = [];
|
|
15
|
+
this.active = false;
|
|
16
|
+
}
|
|
17
|
+
/** Start tracking. Clear any previous state. */
|
|
18
|
+
start() {
|
|
19
|
+
this.components = [];
|
|
20
|
+
this.composables = [];
|
|
21
|
+
this.nets = [];
|
|
22
|
+
this.items = [];
|
|
23
|
+
this.active = true;
|
|
24
|
+
}
|
|
25
|
+
/** Stop tracking. */
|
|
26
|
+
stop() {
|
|
27
|
+
this.active = false;
|
|
28
|
+
}
|
|
29
|
+
/** Register a component. */
|
|
30
|
+
registerComponent(comp) {
|
|
31
|
+
if (this.active) {
|
|
32
|
+
this.components.push(comp);
|
|
33
|
+
this.items.push(comp);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Register a composable. */
|
|
37
|
+
registerComposable(composable) {
|
|
38
|
+
if (this.active) {
|
|
39
|
+
this.composables.push(composable);
|
|
40
|
+
this.items.push(composable);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Register a net. */
|
|
44
|
+
registerNet(net) {
|
|
45
|
+
if (this.active) {
|
|
46
|
+
this.nets.push(net);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Unregister a net (e.g. during merging). */
|
|
50
|
+
unregisterNet(net) {
|
|
51
|
+
if (this.active) {
|
|
52
|
+
this.nets = this.nets.filter(n => n !== net);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Get all registered components. */
|
|
56
|
+
getComponents() {
|
|
57
|
+
return this.components;
|
|
58
|
+
}
|
|
59
|
+
/** Get all registered composables. */
|
|
60
|
+
getComposables() {
|
|
61
|
+
return this.composables;
|
|
62
|
+
}
|
|
63
|
+
/** Get all registered items in order. */
|
|
64
|
+
getItems() {
|
|
65
|
+
return this.items;
|
|
66
|
+
}
|
|
67
|
+
/** Get all registered nets. */
|
|
68
|
+
getNets() {
|
|
69
|
+
return this.nets;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.Registry = Registry;
|
|
73
|
+
/** Global registry instance. */
|
|
74
|
+
exports.registry = new Registry();
|
|
75
|
+
//# sourceMappingURL=Registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Registry.js","sourceRoot":"","sources":["../../../src/synth/Registry.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAKH,MAAa,QAAQ;IAArB;QACY,eAAU,GAAqB,EAAE,CAAC;QAClC,gBAAW,GAAU,EAAE,CAAC;QACxB,SAAI,GAAU,EAAE,CAAC;QACjB,UAAK,GAAU,EAAE,CAAC;QAClB,WAAM,GAAG,KAAK,CAAC;IAiE3B,CAAC;IA/DG,gDAAgD;IAChD,KAAK;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,qBAAqB;IACrB,IAAI;QACA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,4BAA4B;IAC5B,iBAAiB,CAAC,IAAoB;QAClC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,kBAAkB,CAAC,UAAe;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,WAAW,CAAC,GAAQ;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,aAAa,CAAC,GAAQ;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,sCAAsC;IACtC,cAAc;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,yCAAyC;IACzC,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,OAAO;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CACJ;AAtED,4BAsEC;AAED,gCAAgC;AACnB,QAAA,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SchematicOptions, PlacementAlgorithm } from "./types";
|
|
2
|
+
import { Component } from "./Component";
|
|
3
|
+
import { Net } from "./Net";
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for all schematics.
|
|
6
|
+
*
|
|
7
|
+
* A schematic defines a complete circuit design composed of
|
|
8
|
+
* Nets, Components, Composables, and Modules.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* class MyBoard extends Schematic {
|
|
13
|
+
* generate() {
|
|
14
|
+
* const vcc = new Net({ name: "VCC", class: "Power" });
|
|
15
|
+
* const r1 = new Component({ symbol: "Device:R", ref: "R1", footprint: "..." });
|
|
16
|
+
* r1.pins.A = vcc;
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* export default new MyBoard({ name: "MyBoard" });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare abstract class Schematic {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
private _layout?;
|
|
25
|
+
private _placementAlgorithm?;
|
|
26
|
+
constructor(options: SchematicOptions);
|
|
27
|
+
/** Generate the circuit — define all nets, components, and connections. */
|
|
28
|
+
abstract generate(): void;
|
|
29
|
+
/** @internal Generate and capture registered objects */
|
|
30
|
+
_generateWithCapture(): {
|
|
31
|
+
name: string;
|
|
32
|
+
components: Component<any>[];
|
|
33
|
+
nets: Net[];
|
|
34
|
+
placementAlgorithm?: PlacementAlgorithm;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Schematic = void 0;
|
|
4
|
+
const Registry_1 = require("./Registry");
|
|
5
|
+
/**
|
|
6
|
+
* Abstract base class for all schematics.
|
|
7
|
+
*
|
|
8
|
+
* A schematic defines a complete circuit design composed of
|
|
9
|
+
* Nets, Components, Composables, and Modules.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* class MyBoard extends Schematic {
|
|
14
|
+
* generate() {
|
|
15
|
+
* const vcc = new Net({ name: "VCC", class: "Power" });
|
|
16
|
+
* const r1 = new Component({ symbol: "Device:R", ref: "R1", footprint: "..." });
|
|
17
|
+
* r1.pins.A = vcc;
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* export default new MyBoard({ name: "MyBoard" });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
class Schematic {
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.name = options.name;
|
|
26
|
+
this._layout = options.layout;
|
|
27
|
+
this._placementAlgorithm = options.placementAlgorithm;
|
|
28
|
+
}
|
|
29
|
+
/** @internal Generate and capture registered objects */
|
|
30
|
+
_generateWithCapture() {
|
|
31
|
+
Registry_1.registry.start();
|
|
32
|
+
try {
|
|
33
|
+
this.generate();
|
|
34
|
+
const topLevelItems = Registry_1.registry.getItems().filter((c) => !c.parent);
|
|
35
|
+
if (this._layout) {
|
|
36
|
+
this._layout.apply(topLevelItems);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
Registry_1.registry.stop();
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
name: this.name,
|
|
44
|
+
components: Registry_1.registry.getComponents(),
|
|
45
|
+
nets: Registry_1.registry.getNets(),
|
|
46
|
+
placementAlgorithm: this._placementAlgorithm,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Schematic = Schematic;
|
|
51
|
+
//# sourceMappingURL=Schematic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schematic.js","sourceRoot":"","sources":["../../../src/synth/Schematic.ts"],"names":[],"mappings":";;;AACA,oDAAiD;AAIjD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAsB,SAAS;IAK7B,YAAY,OAAyB;QACnC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACxD,CAAC;IAKD,wDAAwD;IACxD,oBAAoB;QAMlB,mBAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,MAAM,aAAa,GAAG,mBAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAExE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,mBAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,mBAAQ,CAAC,aAAa,EAAE;YACpC,IAAI,EAAE,mBAAQ,CAAC,OAAO,EAAE;YACxB,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;SAC7C,CAAC;IACJ,CAAC;CACF;AAxCD,8BAwCC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PCB Design Framework
|
|
3
|
+
*
|
|
4
|
+
* Type-safe TypeScript framework for PCB design with circuit-synth.
|
|
5
|
+
*/
|
|
6
|
+
export { Pin, NetClass, NetOptions, ComponentOptions, ComposableOptions, ModuleOptions, SchematicOptions, PinProxy, PinAssignable, PinMapFn, SymbolName, FootprintName, SchematicPosition, PcbPosition } from "./types";
|
|
7
|
+
export { Registry } from "./Registry";
|
|
8
|
+
export { Schematic } from "./Schematic";
|
|
9
|
+
export { Net } from "./Net";
|
|
10
|
+
export { Component } from "./Component";
|
|
11
|
+
export { Composable } from "./Composable";
|
|
12
|
+
export { Module } from "./Module";
|
|
13
|
+
export { DNC, TP } from "./Markers";
|
|
14
|
+
export { KicadFootprint } from "./KicadFootprint";
|
|
15
|
+
export { KicadSymbol } from "./KicadSymbol";
|
|
16
|
+
export { KicadLibrary } from "./KicadLibrary";
|
|
17
|
+
export { HBoxLayout, VBoxLayout, Layout } from "./Layout";
|
|
18
|
+
export { generatePython, CircuitSnapshot } from "../cli/codegen";
|
|
19
|
+
export { runSynthesis } from "../cli/synthesis";
|
|
20
|
+
export { Kicad3DModel, SolidBuilder } from "./3d";
|
|
21
|
+
export type { Model3DLink, ExportOptions, ExportResult, Vec3, ColorRGBA } from "./3d";
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PCB Design Framework
|
|
4
|
+
*
|
|
5
|
+
* Type-safe TypeScript framework for PCB design with circuit-synth.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SolidBuilder = exports.Kicad3DModel = exports.runSynthesis = exports.generatePython = exports.Layout = exports.VBoxLayout = exports.HBoxLayout = exports.KicadLibrary = exports.KicadSymbol = exports.KicadFootprint = exports.TP = exports.DNC = exports.Module = exports.Composable = exports.Component = exports.Net = exports.Schematic = exports.Registry = exports.Pin = void 0;
|
|
9
|
+
// Core types
|
|
10
|
+
var types_1 = require("./types");
|
|
11
|
+
Object.defineProperty(exports, "Pin", { enumerable: true, get: function () { return types_1.Pin; } });
|
|
12
|
+
var Registry_1 = require("./Registry");
|
|
13
|
+
Object.defineProperty(exports, "Registry", { enumerable: true, get: function () { return Registry_1.Registry; } });
|
|
14
|
+
// Classes
|
|
15
|
+
var Schematic_1 = require("./Schematic");
|
|
16
|
+
Object.defineProperty(exports, "Schematic", { enumerable: true, get: function () { return Schematic_1.Schematic; } });
|
|
17
|
+
var Net_1 = require("./Net");
|
|
18
|
+
Object.defineProperty(exports, "Net", { enumerable: true, get: function () { return Net_1.Net; } });
|
|
19
|
+
var Component_1 = require("./Component");
|
|
20
|
+
Object.defineProperty(exports, "Component", { enumerable: true, get: function () { return Component_1.Component; } });
|
|
21
|
+
var Composable_1 = require("./Composable");
|
|
22
|
+
Object.defineProperty(exports, "Composable", { enumerable: true, get: function () { return Composable_1.Composable; } });
|
|
23
|
+
var Module_1 = require("./Module");
|
|
24
|
+
Object.defineProperty(exports, "Module", { enumerable: true, get: function () { return Module_1.Module; } });
|
|
25
|
+
var Markers_1 = require("./Markers");
|
|
26
|
+
Object.defineProperty(exports, "DNC", { enumerable: true, get: function () { return Markers_1.DNC; } });
|
|
27
|
+
Object.defineProperty(exports, "TP", { enumerable: true, get: function () { return Markers_1.TP; } });
|
|
28
|
+
var KicadFootprint_1 = require("./KicadFootprint");
|
|
29
|
+
Object.defineProperty(exports, "KicadFootprint", { enumerable: true, get: function () { return KicadFootprint_1.KicadFootprint; } });
|
|
30
|
+
var KicadSymbol_1 = require("./KicadSymbol");
|
|
31
|
+
Object.defineProperty(exports, "KicadSymbol", { enumerable: true, get: function () { return KicadSymbol_1.KicadSymbol; } });
|
|
32
|
+
var KicadLibrary_1 = require("./KicadLibrary");
|
|
33
|
+
Object.defineProperty(exports, "KicadLibrary", { enumerable: true, get: function () { return KicadLibrary_1.KicadLibrary; } });
|
|
34
|
+
var Layout_1 = require("./Layout");
|
|
35
|
+
Object.defineProperty(exports, "HBoxLayout", { enumerable: true, get: function () { return Layout_1.HBoxLayout; } });
|
|
36
|
+
Object.defineProperty(exports, "VBoxLayout", { enumerable: true, get: function () { return Layout_1.VBoxLayout; } });
|
|
37
|
+
Object.defineProperty(exports, "Layout", { enumerable: true, get: function () { return Layout_1.Layout; } });
|
|
38
|
+
var codegen_1 = require("../cli/codegen");
|
|
39
|
+
Object.defineProperty(exports, "generatePython", { enumerable: true, get: function () { return codegen_1.generatePython; } });
|
|
40
|
+
var synthesis_1 = require("../cli/synthesis");
|
|
41
|
+
Object.defineProperty(exports, "runSynthesis", { enumerable: true, get: function () { return synthesis_1.runSynthesis; } });
|
|
42
|
+
// 3D model pipeline
|
|
43
|
+
var _3d_1 = require("./3d");
|
|
44
|
+
Object.defineProperty(exports, "Kicad3DModel", { enumerable: true, get: function () { return _3d_1.Kicad3DModel; } });
|
|
45
|
+
Object.defineProperty(exports, "SolidBuilder", { enumerable: true, get: function () { return _3d_1.SolidBuilder; } });
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/synth/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,aAAa;AACb,4CAAmO;AAA1N,4FAAA,GAAG,OAAA;AACZ,kDAAiD;AAAxC,oGAAA,QAAQ,OAAA;AAEjB,UAAU;AACV,oDAAmD;AAA1C,sGAAA,SAAS,OAAA;AAClB,wCAAuC;AAA9B,0FAAA,GAAG,OAAA;AACZ,oDAAmD;AAA1C,sGAAA,SAAS,OAAA;AAClB,sDAAqD;AAA5C,wGAAA,UAAU,OAAA;AACnB,8CAA6C;AAApC,gGAAA,MAAM,OAAA;AACf,gDAA+C;AAAtC,8FAAA,GAAG,OAAA;AAAE,6FAAA,EAAE,OAAA;AAChB,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AACvB,wDAAuD;AAA9C,0GAAA,WAAW,OAAA;AACpB,0DAAyD;AAAhD,4GAAA,YAAY,OAAA;AACrB,8CAAqE;AAA5D,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,gGAAA,MAAM,OAAA;AACvC,oDAA2E;AAAlE,yGAAA,cAAc,OAAA;AACvB,wDAA0D;AAAjD,yGAAA,YAAY,OAAA;AAErB,oBAAoB;AACpB,uCAA6D;AAApD,mGAAA,YAAY,OAAA;AAAE,mGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kicad-types-placeholder.js","sourceRoot":"","sources":["../../../src/synth/kicad-types-placeholder.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the PCB design framework.
|
|
3
|
+
*/
|
|
4
|
+
import type { Net } from "./Net";
|
|
5
|
+
import { KicadLibrarySymbol, KicadLibraryFootprint } from "./kicad-types-placeholder.js";
|
|
6
|
+
export type SymbolName = KicadLibrarySymbol | `Composable:${string}` | `Project_Symbols:${string}`;
|
|
7
|
+
export type FootprintName = KicadLibraryFootprint | `MountingHole:${string}` | `Composable:${string}` | `Project_Footprints:${string}`;
|
|
8
|
+
/** Represents a reference to a physical component pin */
|
|
9
|
+
export declare class Pin {
|
|
10
|
+
/** The component this pin belongs to */
|
|
11
|
+
readonly component: {
|
|
12
|
+
ref: string;
|
|
13
|
+
symbol: SymbolName;
|
|
14
|
+
};
|
|
15
|
+
/** The pin name (number or string) */
|
|
16
|
+
readonly name: string;
|
|
17
|
+
/** The net this pin is connected to, if any */
|
|
18
|
+
private _net;
|
|
19
|
+
constructor(component: {
|
|
20
|
+
ref: string;
|
|
21
|
+
symbol: SymbolName;
|
|
22
|
+
}, name: string);
|
|
23
|
+
get net(): import("./Net").Net | null;
|
|
24
|
+
/** @internal */
|
|
25
|
+
_setNet(net: import("./Net").Net): void;
|
|
26
|
+
}
|
|
27
|
+
/** Net class categories */
|
|
28
|
+
export type NetClass = "Power" | "Signal" | "Data" | string;
|
|
29
|
+
/** Schematic position info */
|
|
30
|
+
export interface SchematicPosition {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
rotation?: number;
|
|
34
|
+
}
|
|
35
|
+
/** PCB position info */
|
|
36
|
+
export interface PcbPosition {
|
|
37
|
+
x: number;
|
|
38
|
+
y: number;
|
|
39
|
+
rotation?: number;
|
|
40
|
+
side?: "front" | "back";
|
|
41
|
+
}
|
|
42
|
+
/** Common interface for items that can be positioned in a layout */
|
|
43
|
+
export interface LayoutItem {
|
|
44
|
+
schematicPosition?: SchematicPosition;
|
|
45
|
+
readonly ref: string;
|
|
46
|
+
}
|
|
47
|
+
/** Interface for layout algorithms */
|
|
48
|
+
export interface ILayout {
|
|
49
|
+
apply(items: LayoutItem[]): void;
|
|
50
|
+
}
|
|
51
|
+
/** Placement algorithms supported by circuit-synth */
|
|
52
|
+
export type PlacementAlgorithm = "hierarchical" | "force_directed" | "linear" | "none";
|
|
53
|
+
/** Options for Net constructor */
|
|
54
|
+
export interface NetOptions {
|
|
55
|
+
name: string;
|
|
56
|
+
class?: NetClass;
|
|
57
|
+
}
|
|
58
|
+
/** Options for Component constructor (without pin mapping) */
|
|
59
|
+
export interface ComponentOptions {
|
|
60
|
+
symbol: SymbolName;
|
|
61
|
+
ref: string;
|
|
62
|
+
footprint: FootprintName;
|
|
63
|
+
description?: string;
|
|
64
|
+
partNo?: string;
|
|
65
|
+
value?: string;
|
|
66
|
+
schematicPosition?: SchematicPosition;
|
|
67
|
+
pcbPosition?: PcbPosition;
|
|
68
|
+
}
|
|
69
|
+
/** Options for Composable constructor */
|
|
70
|
+
export interface ComposableOptions {
|
|
71
|
+
ref: string;
|
|
72
|
+
description?: string;
|
|
73
|
+
schematicPosition?: SchematicPosition;
|
|
74
|
+
pcbPosition?: PcbPosition;
|
|
75
|
+
/** Optional layout to apply to internal components */
|
|
76
|
+
layout?: ILayout;
|
|
77
|
+
}
|
|
78
|
+
/** Options for Module constructor (extends Component) */
|
|
79
|
+
export interface ModuleOptions extends ComponentOptions {
|
|
80
|
+
}
|
|
81
|
+
/** Options for Schematic constructor */
|
|
82
|
+
export interface SchematicOptions {
|
|
83
|
+
name: string;
|
|
84
|
+
/** Optional layout to apply to top-level components */
|
|
85
|
+
layout?: ILayout;
|
|
86
|
+
/** The algorithm used by circuit-synth for automatic placement. Defaults to "hierarchical". */
|
|
87
|
+
placementAlgorithm?: PlacementAlgorithm;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A function that maps numbered pins to named pins.
|
|
91
|
+
* Receives a `pin(n)` helper that returns the Pin for pin number `n`.
|
|
92
|
+
* Returns a record mapping name → Pin.
|
|
93
|
+
*/
|
|
94
|
+
export type PinMapFn<P extends string> = (pin: (n: number) => Pin) => Record<P, Pin>;
|
|
95
|
+
/**
|
|
96
|
+
* Proxy type for pin access on Component/Composable.
|
|
97
|
+
*
|
|
98
|
+
* - getter: `component.pins.X` returns `Pin` at runtime
|
|
99
|
+
* - setter: `component.pins.X = net | pin | DNC | TP | null`
|
|
100
|
+
*
|
|
101
|
+
* TypeScript mapped types can't express different get/set types,
|
|
102
|
+
* so we use a broad union to allow all valid assignment targets.
|
|
103
|
+
*/
|
|
104
|
+
export type PinAssignable = Pin | Net | import("./Markers").DNC | import("./Markers").TP | null;
|
|
105
|
+
export type PinProxy<T extends string | number> = {
|
|
106
|
+
[K in T]: any;
|
|
107
|
+
} & {
|
|
108
|
+
[key: string]: any;
|
|
109
|
+
[key: number]: any;
|
|
110
|
+
assign(map: Partial<Record<T, PinAssignable>>): void;
|
|
111
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Pin = void 0;
|
|
4
|
+
/** Represents a reference to a physical component pin */
|
|
5
|
+
class Pin {
|
|
6
|
+
constructor(component, name) {
|
|
7
|
+
/** The net this pin is connected to, if any */
|
|
8
|
+
this._net = null;
|
|
9
|
+
this.component = component;
|
|
10
|
+
this.name = name;
|
|
11
|
+
}
|
|
12
|
+
get net() {
|
|
13
|
+
return this._net;
|
|
14
|
+
}
|
|
15
|
+
/** @internal */
|
|
16
|
+
_setNet(net) {
|
|
17
|
+
// If already connected to a different net, we'll allow the override.
|
|
18
|
+
// The Net class is responsible for ensuring consistency during merges.
|
|
19
|
+
this._net = net;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.Pin = Pin;
|
|
23
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/synth/types.ts"],"names":[],"mappings":";;;AASA,yDAAyD;AACzD,MAAa,GAAG;IAQd,YAAY,SAA8C,EAAE,IAAY;QAHxE,+CAA+C;QACvC,SAAI,GAA+B,IAAI,CAAC;QAG9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,GAAwB;QAC9B,qEAAqE;QACrE,uEAAuE;QACvE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;CACF;AAvBD,kBAuBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|