@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.
Files changed (168) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +186 -0
  3. package/dist/src/cli/cli.d.ts +6 -0
  4. package/dist/src/cli/cli.js +87 -0
  5. package/dist/src/cli/cli.js.map +1 -0
  6. package/dist/src/cli/codegen.d.ts +25 -0
  7. package/dist/src/cli/codegen.js +170 -0
  8. package/dist/src/cli/codegen.js.map +1 -0
  9. package/dist/src/cli/commands/export.d.ts +13 -0
  10. package/dist/src/cli/commands/export.js +301 -0
  11. package/dist/src/cli/commands/export.js.map +1 -0
  12. package/dist/src/cli/commands/lib.d.ts +10 -0
  13. package/dist/src/cli/commands/lib.js +158 -0
  14. package/dist/src/cli/commands/lib.js.map +1 -0
  15. package/dist/src/cli/commands/parts.d.ts +4 -0
  16. package/dist/src/cli/commands/parts.js +104 -0
  17. package/dist/src/cli/commands/parts.js.map +1 -0
  18. package/dist/src/cli/commands/setup.d.ts +4 -0
  19. package/dist/src/cli/commands/setup.js +86 -0
  20. package/dist/src/cli/commands/setup.js.map +1 -0
  21. package/dist/src/cli/commands/synth.d.ts +4 -0
  22. package/dist/src/cli/commands/synth.js +75 -0
  23. package/dist/src/cli/commands/synth.js.map +1 -0
  24. package/dist/src/cli/commands/types.d.ts +1 -0
  25. package/dist/src/cli/commands/types.js +140 -0
  26. package/dist/src/cli/commands/types.js.map +1 -0
  27. package/dist/src/cli/commands/validate.d.ts +5 -0
  28. package/dist/src/cli/commands/validate.js +105 -0
  29. package/dist/src/cli/commands/validate.js.map +1 -0
  30. package/dist/src/cli/config.d.ts +9 -0
  31. package/dist/src/cli/config.js +80 -0
  32. package/dist/src/cli/config.js.map +1 -0
  33. package/dist/src/cli/env.d.ts +4 -0
  34. package/dist/src/cli/env.js +166 -0
  35. package/dist/src/cli/env.js.map +1 -0
  36. package/dist/src/cli/search-jlc.d.ts +0 -0
  37. package/dist/src/cli/search-jlc.js +23 -0
  38. package/dist/src/cli/search-jlc.js.map +1 -0
  39. package/dist/src/cli/synthesis.d.ts +11 -0
  40. package/dist/src/cli/synthesis.js +120 -0
  41. package/dist/src/cli/synthesis.js.map +1 -0
  42. package/dist/src/cli/utils/bom.d.ts +19 -0
  43. package/dist/src/cli/utils/bom.js +130 -0
  44. package/dist/src/cli/utils/bom.js.map +1 -0
  45. package/dist/src/cli/utils/cpl.d.ts +18 -0
  46. package/dist/src/cli/utils/cpl.js +101 -0
  47. package/dist/src/cli/utils/cpl.js.map +1 -0
  48. package/dist/src/cli/utils.d.ts +11 -0
  49. package/dist/src/cli/utils.js +136 -0
  50. package/dist/src/cli/utils.js.map +1 -0
  51. package/dist/src/generate-kicad-types.d.ts +1 -0
  52. package/dist/src/generate-kicad-types.js +137 -0
  53. package/dist/src/generate-kicad-types.js.map +1 -0
  54. package/dist/src/synth/3d/Kicad3DModel.d.ts +81 -0
  55. package/dist/src/synth/3d/Kicad3DModel.js +250 -0
  56. package/dist/src/synth/3d/Kicad3DModel.js.map +1 -0
  57. package/dist/src/synth/3d/booleans.d.ts +10 -0
  58. package/dist/src/synth/3d/booleans.js +30 -0
  59. package/dist/src/synth/3d/booleans.js.map +1 -0
  60. package/dist/src/synth/3d/fillet.d.ts +14 -0
  61. package/dist/src/synth/3d/fillet.js +47 -0
  62. package/dist/src/synth/3d/fillet.js.map +1 -0
  63. package/dist/src/synth/3d/index.d.ts +7 -0
  64. package/dist/src/synth/3d/index.js +14 -0
  65. package/dist/src/synth/3d/index.js.map +1 -0
  66. package/dist/src/synth/3d/occ-loader.d.ts +5 -0
  67. package/dist/src/synth/3d/occ-loader.js +77 -0
  68. package/dist/src/synth/3d/occ-loader.js.map +1 -0
  69. package/dist/src/synth/3d/occ.d.ts +3 -0
  70. package/dist/src/synth/3d/occ.js +31 -0
  71. package/dist/src/synth/3d/occ.js.map +1 -0
  72. package/dist/src/synth/3d/primitives.d.ts +38 -0
  73. package/dist/src/synth/3d/primitives.js +58 -0
  74. package/dist/src/synth/3d/primitives.js.map +1 -0
  75. package/dist/src/synth/3d/stepWriter.d.ts +7 -0
  76. package/dist/src/synth/3d/stepWriter.js +72 -0
  77. package/dist/src/synth/3d/stepWriter.js.map +1 -0
  78. package/dist/src/synth/3d/transforms.d.ts +18 -0
  79. package/dist/src/synth/3d/transforms.js +74 -0
  80. package/dist/src/synth/3d/transforms.js.map +1 -0
  81. package/dist/src/synth/3d/types.d.ts +54 -0
  82. package/dist/src/synth/3d/types.js +21 -0
  83. package/dist/src/synth/3d/types.js.map +1 -0
  84. package/dist/src/synth/3d/vrmlWriter.d.ts +5 -0
  85. package/dist/src/synth/3d/vrmlWriter.js +171 -0
  86. package/dist/src/synth/3d/vrmlWriter.js.map +1 -0
  87. package/dist/src/synth/Component.d.ts +67 -0
  88. package/dist/src/synth/Component.js +185 -0
  89. package/dist/src/synth/Component.js.map +1 -0
  90. package/dist/src/synth/Composable.d.ts +73 -0
  91. package/dist/src/synth/Composable.js +128 -0
  92. package/dist/src/synth/Composable.js.map +1 -0
  93. package/dist/src/synth/KicadFootprint.d.ts +97 -0
  94. package/dist/src/synth/KicadFootprint.js +312 -0
  95. package/dist/src/synth/KicadFootprint.js.map +1 -0
  96. package/dist/src/synth/KicadLibrary.d.ts +66 -0
  97. package/dist/src/synth/KicadLibrary.js +162 -0
  98. package/dist/src/synth/KicadLibrary.js.map +1 -0
  99. package/dist/src/synth/KicadSymbol.d.ts +71 -0
  100. package/dist/src/synth/KicadSymbol.js +190 -0
  101. package/dist/src/synth/KicadSymbol.js.map +1 -0
  102. package/dist/src/synth/Layout.d.ts +37 -0
  103. package/dist/src/synth/Layout.js +58 -0
  104. package/dist/src/synth/Layout.js.map +1 -0
  105. package/dist/src/synth/Markers.d.ts +35 -0
  106. package/dist/src/synth/Markers.js +48 -0
  107. package/dist/src/synth/Markers.js.map +1 -0
  108. package/dist/src/synth/Module.d.ts +56 -0
  109. package/dist/src/synth/Module.js +65 -0
  110. package/dist/src/synth/Module.js.map +1 -0
  111. package/dist/src/synth/Net.d.ts +23 -0
  112. package/dist/src/synth/Net.js +95 -0
  113. package/dist/src/synth/Net.js.map +1 -0
  114. package/dist/src/synth/Registry.d.ts +36 -0
  115. package/dist/src/synth/Registry.js +75 -0
  116. package/dist/src/synth/Registry.js.map +1 -0
  117. package/dist/src/synth/Schematic.d.ts +36 -0
  118. package/dist/src/synth/Schematic.js +51 -0
  119. package/dist/src/synth/Schematic.js.map +1 -0
  120. package/dist/src/synth/index.d.ts +21 -0
  121. package/dist/src/synth/index.js +46 -0
  122. package/dist/src/synth/index.js.map +1 -0
  123. package/dist/src/synth/kicad-types-placeholder.d.ts +6 -0
  124. package/dist/src/synth/kicad-types-placeholder.js +7 -0
  125. package/dist/src/synth/kicad-types-placeholder.js.map +1 -0
  126. package/dist/src/synth/types.d.ts +111 -0
  127. package/dist/src/synth/types.js +23 -0
  128. package/dist/src/synth/types.js.map +1 -0
  129. package/dist/src/tests/3d-model.test.d.ts +1 -0
  130. package/dist/src/tests/3d-model.test.js +282 -0
  131. package/dist/src/tests/3d-model.test.js.map +1 -0
  132. package/dist/src/tests/codegen.test.d.ts +1 -0
  133. package/dist/src/tests/codegen.test.js +80 -0
  134. package/dist/src/tests/codegen.test.js.map +1 -0
  135. package/dist/src/tests/dmx_node.test.d.ts +1 -0
  136. package/dist/src/tests/dmx_node.test.js +42 -0
  137. package/dist/src/tests/dmx_node.test.js.map +1 -0
  138. package/dist/src/tests/dnc.test.d.ts +1 -0
  139. package/dist/src/tests/dnc.test.js +100 -0
  140. package/dist/src/tests/dnc.test.js.map +1 -0
  141. package/dist/src/tests/kicad-lib.test.d.ts +1 -0
  142. package/dist/src/tests/kicad-lib.test.js +465 -0
  143. package/dist/src/tests/kicad-lib.test.js.map +1 -0
  144. package/dist/src/tests/layout.test.d.ts +1 -0
  145. package/dist/src/tests/layout.test.js +92 -0
  146. package/dist/src/tests/layout.test.js.map +1 -0
  147. package/dist/src/tests/migration.test.d.ts +1 -0
  148. package/dist/src/tests/migration.test.js +58 -0
  149. package/dist/src/tests/migration.test.js.map +1 -0
  150. package/dist/src/tests/net_merging.test.d.ts +1 -0
  151. package/dist/src/tests/net_merging.test.js +97 -0
  152. package/dist/src/tests/net_merging.test.js.map +1 -0
  153. package/dist/src/tests/occ-minimal.test.d.ts +1 -0
  154. package/dist/src/tests/occ-minimal.test.js +14 -0
  155. package/dist/src/tests/occ-minimal.test.js.map +1 -0
  156. package/dist/src/tests/placement.test.d.ts +1 -0
  157. package/dist/src/tests/placement.test.js +130 -0
  158. package/dist/src/tests/placement.test.js.map +1 -0
  159. package/dist/src/tests/synthesis.test.d.ts +1 -0
  160. package/dist/src/tests/synthesis.test.js +88 -0
  161. package/dist/src/tests/synthesis.test.js.map +1 -0
  162. package/dist/src/types/kicad-library.d.ts +6 -0
  163. package/dist/src/types/kicad-library.js +7 -0
  164. package/dist/src/types/kicad-library.js.map +1 -0
  165. package/dist/src/types/kicad-library.ts +61770 -0
  166. package/package.json +57 -0
  167. package/scripts/patch-opencascade.ts +18 -0
  168. package/scripts/wasm-stub.js +1 -0
@@ -0,0 +1,465 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const vitest_1 = require("vitest");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const KicadFootprint_1 = require("../synth/KicadFootprint");
41
+ const KicadSymbol_1 = require("../synth/KicadSymbol");
42
+ const KicadLibrary_1 = require("../synth/KicadLibrary");
43
+ // ─── KicadFootprint ──────────────────────────────────────────────────
44
+ (0, vitest_1.describe)("KicadFootprint", () => {
45
+ (0, vitest_1.it)("generates minimal footprint boilerplate", () => {
46
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "TestPart" });
47
+ const out = fp.serialize();
48
+ (0, vitest_1.expect)(out).toContain('(footprint "TestPart"');
49
+ (0, vitest_1.expect)(out).toContain("(version 20241229)");
50
+ (0, vitest_1.expect)(out).toContain('(generator "pcb_framework")');
51
+ (0, vitest_1.expect)(out).toContain('(layer "F.Cu")');
52
+ (0, vitest_1.expect)(out).toContain('(property "Reference" "REF**"');
53
+ (0, vitest_1.expect)(out).toContain('(property "Value" "TestPart"');
54
+ (0, vitest_1.expect)(out).toContain("(attr smd)");
55
+ (0, vitest_1.expect)(out).toContain("(embedded_fonts no)");
56
+ });
57
+ (0, vitest_1.it)("supports through_hole attribute", () => {
58
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "TH_Part", attr: "through_hole" });
59
+ (0, vitest_1.expect)(fp.serialize()).toContain("(attr through_hole)");
60
+ });
61
+ (0, vitest_1.it)("serializes SMD pads with roundrect shape", () => {
62
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
63
+ fp.addPad({
64
+ number: "1",
65
+ type: "smd",
66
+ shape: "roundrect",
67
+ x: -5,
68
+ y: 0,
69
+ width: 3,
70
+ height: 1.5,
71
+ roundrectRatio: 0.15,
72
+ });
73
+ const out = fp.serialize();
74
+ (0, vitest_1.expect)(out).toContain('(pad "1" smd roundrect');
75
+ (0, vitest_1.expect)(out).toContain("(at -5 0)");
76
+ (0, vitest_1.expect)(out).toContain("(size 3 1.5)");
77
+ (0, vitest_1.expect)(out).toContain('"F.Cu"');
78
+ (0, vitest_1.expect)(out).toContain('"F.Mask"');
79
+ (0, vitest_1.expect)(out).toContain('"F.Paste"');
80
+ (0, vitest_1.expect)(out).toContain("(roundrect_rratio 0.15)");
81
+ });
82
+ (0, vitest_1.it)("serializes through-hole pads with drill", () => {
83
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
84
+ fp.addPad({
85
+ number: "1",
86
+ type: "thru_hole",
87
+ shape: "circle",
88
+ x: 0,
89
+ y: 0,
90
+ width: 1.8,
91
+ height: 1.8,
92
+ drill: 1.0,
93
+ });
94
+ const out = fp.serialize();
95
+ (0, vitest_1.expect)(out).toContain("thru_hole circle");
96
+ (0, vitest_1.expect)(out).toContain("(drill 1)");
97
+ (0, vitest_1.expect)(out).toContain('"*.Cu"');
98
+ (0, vitest_1.expect)(out).toContain('"*.Mask"');
99
+ });
100
+ (0, vitest_1.it)("serializes through-hole pads with drill offset", () => {
101
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
102
+ fp.addPad({
103
+ number: "1",
104
+ type: "thru_hole",
105
+ shape: "oval",
106
+ x: 0,
107
+ y: 0,
108
+ width: 2.4,
109
+ height: 1.6,
110
+ drill: 1.0,
111
+ drillOffsetX: 0.5,
112
+ drillOffsetY: -0.3,
113
+ });
114
+ const out = fp.serialize();
115
+ (0, vitest_1.expect)(out).toContain("(drill 1 (offset 0.5 -0.3))");
116
+ });
117
+ (0, vitest_1.it)("does not emit offset when only drill is set", () => {
118
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
119
+ fp.addPad({
120
+ number: "1",
121
+ type: "thru_hole",
122
+ shape: "circle",
123
+ x: 0,
124
+ y: 0,
125
+ width: 1.8,
126
+ height: 1.8,
127
+ drill: 1.0,
128
+ });
129
+ const out = fp.serialize();
130
+ (0, vitest_1.expect)(out).toContain("(drill 1)");
131
+ (0, vitest_1.expect)(out).not.toContain("offset");
132
+ });
133
+ (0, vitest_1.it)("serializes custom layers on pads", () => {
134
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
135
+ fp.addPad({
136
+ number: "1",
137
+ type: "smd",
138
+ shape: "rect",
139
+ x: 0,
140
+ y: 0,
141
+ width: 1,
142
+ height: 1,
143
+ layers: ["B.Cu", "B.Mask"],
144
+ });
145
+ const out = fp.serialize();
146
+ (0, vitest_1.expect)(out).toContain('"B.Cu" "B.Mask"');
147
+ });
148
+ (0, vitest_1.it)("serializes silkscreen lines", () => {
149
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
150
+ fp.addLine({ x1: -10, y1: -5, x2: 10, y2: -5 });
151
+ const out = fp.serialize();
152
+ (0, vitest_1.expect)(out).toContain("(fp_line");
153
+ (0, vitest_1.expect)(out).toContain("(start -10 -5)");
154
+ (0, vitest_1.expect)(out).toContain("(end 10 -5)");
155
+ (0, vitest_1.expect)(out).toContain('(layer "F.SilkS")');
156
+ (0, vitest_1.expect)(out).toContain("(width 0.15)");
157
+ });
158
+ (0, vitest_1.it)("serializes rectangles as four lines", () => {
159
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
160
+ fp.addRect({ x1: -5, y1: -3, x2: 5, y2: 3 });
161
+ const out = fp.serialize();
162
+ // Should produce 4 fp_line entries
163
+ const lineCount = (out.match(/\(fp_line/g) || []).length;
164
+ (0, vitest_1.expect)(lineCount).toBe(4);
165
+ // Should contain corners
166
+ (0, vitest_1.expect)(out).toContain("(start -5 -3)");
167
+ (0, vitest_1.expect)(out).toContain("(end 5 -3)");
168
+ (0, vitest_1.expect)(out).toContain("(start 5 3)");
169
+ (0, vitest_1.expect)(out).toContain("(end -5 3)");
170
+ });
171
+ (0, vitest_1.it)("serializes text labels", () => {
172
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
173
+ fp.addText({ text: "VCC", x: -10, y: -3, justify: "left" });
174
+ const out = fp.serialize();
175
+ (0, vitest_1.expect)(out).toContain('(fp_text user "VCC"');
176
+ (0, vitest_1.expect)(out).toContain("(at -10 -3 0)");
177
+ (0, vitest_1.expect)(out).toContain("(unlocked yes)");
178
+ (0, vitest_1.expect)(out).toContain("(justify left bottom)");
179
+ });
180
+ (0, vitest_1.it)("serializes text without justify when not specified", () => {
181
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
182
+ fp.addText({ text: "PIN1", x: 0, y: 0 });
183
+ const out = fp.serialize();
184
+ (0, vitest_1.expect)(out).toContain('(fp_text user "PIN1"');
185
+ (0, vitest_1.expect)(out).not.toContain("(justify");
186
+ });
187
+ (0, vitest_1.it)("supports method chaining", () => {
188
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "Test" });
189
+ const result = fp
190
+ .addPad({ number: "1", type: "smd", shape: "rect", x: 0, y: 0, width: 1, height: 1 })
191
+ .addLine({ x1: -1, y1: -1, x2: 1, y2: -1 })
192
+ .addRect({ x1: -2, y1: -2, x2: 2, y2: 2 })
193
+ .addText({ text: "A", x: 0, y: 0 });
194
+ (0, vitest_1.expect)(result).toBe(fp);
195
+ });
196
+ (0, vitest_1.it)("generates multiple pads in sequence", () => {
197
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "TestIC" });
198
+ for (let i = 1; i <= 4; i++) {
199
+ fp.addPad({
200
+ number: String(i),
201
+ type: "smd",
202
+ shape: "roundrect",
203
+ x: -10,
204
+ y: (i - 1) * 2.54,
205
+ width: 4,
206
+ height: 1.5,
207
+ roundrectRatio: 0.15,
208
+ });
209
+ }
210
+ const out = fp.serialize();
211
+ (0, vitest_1.expect)(out).toContain('(pad "1"');
212
+ (0, vitest_1.expect)(out).toContain('(pad "2"');
213
+ (0, vitest_1.expect)(out).toContain('(pad "3"');
214
+ (0, vitest_1.expect)(out).toContain('(pad "4"');
215
+ });
216
+ (0, vitest_1.it)("writes file to .pretty directory", () => {
217
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kicad-test-"));
218
+ const prettyDir = path.join(tmpDir, "Test.pretty");
219
+ try {
220
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "TestPart" });
221
+ fp.addPad({ number: "1", type: "smd", shape: "rect", x: 0, y: 0, width: 1, height: 1 });
222
+ const filePath = fp.writeFile(prettyDir);
223
+ (0, vitest_1.expect)(fs.existsSync(filePath)).toBe(true);
224
+ (0, vitest_1.expect)(filePath).toContain("TestPart.kicad_mod");
225
+ const content = fs.readFileSync(filePath, "utf-8");
226
+ (0, vitest_1.expect)(content).toContain('(footprint "TestPart"');
227
+ }
228
+ finally {
229
+ fs.rmSync(tmpDir, { recursive: true });
230
+ }
231
+ });
232
+ });
233
+ // ─── KicadSymbol ─────────────────────────────────────────────────────
234
+ (0, vitest_1.describe)("KicadSymbol", () => {
235
+ (0, vitest_1.it)("generates minimal symbol boilerplate", () => {
236
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "TestChip" });
237
+ const out = sym.serialize();
238
+ (0, vitest_1.expect)(out).toContain('(symbol "TestChip"');
239
+ (0, vitest_1.expect)(out).toContain("(exclude_from_sim no)");
240
+ (0, vitest_1.expect)(out).toContain("(in_bom yes)");
241
+ (0, vitest_1.expect)(out).toContain("(on_board yes)");
242
+ (0, vitest_1.expect)(out).toContain('(property "Reference" "U"');
243
+ (0, vitest_1.expect)(out).toContain('(property "Value" "TestChip"');
244
+ (0, vitest_1.expect)(out).toContain("(embedded_fonts no)");
245
+ });
246
+ (0, vitest_1.it)("uses custom reference and value", () => {
247
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "MyRes", reference: "R", value: "10k" });
248
+ const out = sym.serialize();
249
+ (0, vitest_1.expect)(out).toContain('(property "Reference" "R"');
250
+ (0, vitest_1.expect)(out).toContain('(property "Value" "10k"');
251
+ });
252
+ (0, vitest_1.it)("includes footprint property when set", () => {
253
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "MyIC", footprint: "Project_Footprints:MyIC" });
254
+ const out = sym.serialize();
255
+ (0, vitest_1.expect)(out).toContain('(property "Footprint"');
256
+ (0, vitest_1.expect)(out).toContain("(hide yes)");
257
+ });
258
+ (0, vitest_1.it)("includes description property", () => {
259
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "Test", description: "Test component" });
260
+ const out = sym.serialize();
261
+ (0, vitest_1.expect)(out).toContain('(property "Description" "Test component"');
262
+ });
263
+ (0, vitest_1.it)("serializes pins with correct type and direction", () => {
264
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "Test" });
265
+ sym.addPin({ name: "VCC", number: "1", x: -10, y: 5, side: "left", type: "power_in" });
266
+ sym.addPin({ name: "OUT", number: "2", x: 10, y: 0, side: "right", type: "output" });
267
+ sym.addPin({ name: "EN", number: "3", x: 0, y: 10, side: "top", type: "input" });
268
+ sym.addPin({ name: "GND", number: "4", x: 0, y: -10, side: "bottom", type: "power_in" });
269
+ const out = sym.serialize();
270
+ // Pin types
271
+ (0, vitest_1.expect)(out).toContain("(pin power_in line");
272
+ (0, vitest_1.expect)(out).toContain("(pin output line");
273
+ (0, vitest_1.expect)(out).toContain("(pin input line");
274
+ // Pin names and numbers
275
+ (0, vitest_1.expect)(out).toContain('(name "VCC"');
276
+ (0, vitest_1.expect)(out).toContain('(number "1"');
277
+ (0, vitest_1.expect)(out).toContain('(name "OUT"');
278
+ (0, vitest_1.expect)(out).toContain('(number "2"');
279
+ // Direction (rotation angles)
280
+ (0, vitest_1.expect)(out).toContain("(at -10 5 0)"); // left → 0
281
+ (0, vitest_1.expect)(out).toContain("(at 10 0 180)"); // right → 180
282
+ (0, vitest_1.expect)(out).toContain("(at 0 10 90)"); // top → 90
283
+ (0, vitest_1.expect)(out).toContain("(at 0 -10 270)"); // bottom → 270
284
+ });
285
+ (0, vitest_1.it)("serializes pin length", () => {
286
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "Test" });
287
+ sym.addPin({ name: "A", number: "1", x: -5, y: 0, side: "left", type: "passive", length: 3.81 });
288
+ const out = sym.serialize();
289
+ (0, vitest_1.expect)(out).toContain("(length 3.81)");
290
+ });
291
+ (0, vitest_1.it)("serializes rectangles into _0_1 sub-symbol", () => {
292
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "TestIC" });
293
+ sym.addRect({ x1: -8, y1: 5, x2: 8, y2: -5 });
294
+ const out = sym.serialize();
295
+ (0, vitest_1.expect)(out).toContain('(symbol "TestIC_0_1"');
296
+ (0, vitest_1.expect)(out).toContain("(rectangle");
297
+ (0, vitest_1.expect)(out).toContain("(start -8 5)");
298
+ (0, vitest_1.expect)(out).toContain("(end 8 -5)");
299
+ (0, vitest_1.expect)(out).toContain("(type none)"); // default fill
300
+ });
301
+ (0, vitest_1.it)("serializes rectangles with background fill", () => {
302
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "Test" });
303
+ sym.addRect({ x1: -5, y1: 5, x2: 5, y2: -5, fill: "background" });
304
+ const out = sym.serialize();
305
+ (0, vitest_1.expect)(out).toContain("(type background)");
306
+ });
307
+ (0, vitest_1.it)("serializes text into _1_1 sub-symbol", () => {
308
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "TestIC" });
309
+ sym.addText({ text: "3v3 ... 5v", x: 0, y: 0 });
310
+ const out = sym.serialize();
311
+ (0, vitest_1.expect)(out).toContain('(symbol "TestIC_1_1"');
312
+ (0, vitest_1.expect)(out).toContain('(text "3v3 ... 5v"');
313
+ (0, vitest_1.expect)(out).toContain("(at 0 0 0)");
314
+ });
315
+ (0, vitest_1.it)("places pins in _1_1 sub-symbol", () => {
316
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "TestIC" });
317
+ sym.addPin({ name: "A", number: "1", x: -10, y: 0, side: "left", type: "input" });
318
+ const out = sym.serialize();
319
+ (0, vitest_1.expect)(out).toContain('(symbol "TestIC_1_1"');
320
+ (0, vitest_1.expect)(out).toContain("(pin input line");
321
+ });
322
+ (0, vitest_1.it)("supports method chaining", () => {
323
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "Test" });
324
+ const result = sym
325
+ .addRect({ x1: -5, y1: 5, x2: 5, y2: -5 })
326
+ .addPin({ name: "A", number: "1", x: -7, y: 0, side: "left", type: "passive" })
327
+ .addText({ text: "Label", x: 0, y: 0 });
328
+ (0, vitest_1.expect)(result).toBe(sym);
329
+ });
330
+ (0, vitest_1.it)("generates a complete DMX_Module-like symbol", () => {
331
+ const sym = new KicadSymbol_1.KicadSymbol({
332
+ name: "DMX_Module",
333
+ reference: "IC",
334
+ footprint: "Project_Footprints:DMX_Module",
335
+ });
336
+ sym.addRect({ x1: -11.43, y1: 1.27, x2: 11.43, y2: -8.89 });
337
+ sym.addText({ text: "3v3 ... 5v", x: -1.778, y: 0 });
338
+ sym.addPin({ name: "VCC", number: "1", x: -13.97, y: 0, side: "left", type: "power_in" });
339
+ sym.addPin({ name: "TXD", number: "2", x: -13.97, y: -2.54, side: "left", type: "input" });
340
+ sym.addPin({ name: "RXD", number: "3", x: -13.97, y: -5.08, side: "left", type: "output" });
341
+ sym.addPin({ name: "GND", number: "4", x: -13.97, y: -7.62, side: "left", type: "power_in" });
342
+ sym.addPin({ name: "A+", number: "5", x: 13.97, y: 0, side: "right", type: "passive" });
343
+ sym.addPin({ name: "B-", number: "6", x: 13.97, y: -3.81, side: "right", type: "passive" });
344
+ sym.addPin({ name: "GND", number: "7", x: 13.97, y: -7.62, side: "right", type: "power_in" });
345
+ const out = sym.serialize();
346
+ // Has all the key structural elements
347
+ (0, vitest_1.expect)(out).toContain('(symbol "DMX_Module"');
348
+ (0, vitest_1.expect)(out).toContain('(property "Reference" "IC"');
349
+ (0, vitest_1.expect)(out).toContain('(symbol "DMX_Module_0_1"');
350
+ (0, vitest_1.expect)(out).toContain('(symbol "DMX_Module_1_1"');
351
+ (0, vitest_1.expect)(out).toContain('(name "VCC"');
352
+ (0, vitest_1.expect)(out).toContain('(name "A+"');
353
+ (0, vitest_1.expect)(out).toContain('(name "B-"');
354
+ // Left pins at angle 0, right pins at angle 180
355
+ (0, vitest_1.expect)(out).toContain("(at -13.97 0 0)");
356
+ (0, vitest_1.expect)(out).toContain("(at 13.97 0 180)");
357
+ });
358
+ });
359
+ // ─── KicadLibrary ────────────────────────────────────────────────────
360
+ (0, vitest_1.describe)("KicadLibrary", () => {
361
+ (0, vitest_1.it)("generates library header for empty library", () => {
362
+ const lib = new KicadLibrary_1.KicadLibrary();
363
+ const out = lib.serializeSymbols();
364
+ (0, vitest_1.expect)(out).toContain("(kicad_symbol_lib");
365
+ (0, vitest_1.expect)(out).toContain("(version 20241209)");
366
+ (0, vitest_1.expect)(out).toContain('(generator "pcb_framework")');
367
+ (0, vitest_1.expect)(out).toContain('(generator_version "9.0")');
368
+ (0, vitest_1.expect)(out).toContain(")");
369
+ });
370
+ (0, vitest_1.it)("merges multiple symbols into one file", () => {
371
+ const lib = new KicadLibrary_1.KicadLibrary();
372
+ const sym1 = new KicadSymbol_1.KicadSymbol({ name: "IC_A", reference: "U" });
373
+ sym1.addPin({ name: "VCC", number: "1", x: -5, y: 0, side: "left", type: "power_in" });
374
+ const sym2 = new KicadSymbol_1.KicadSymbol({ name: "IC_B", reference: "U" });
375
+ sym2.addPin({ name: "GND", number: "1", x: -5, y: 0, side: "left", type: "power_in" });
376
+ lib.addSymbol(sym1);
377
+ lib.addSymbol(sym2);
378
+ const out = lib.serializeSymbols();
379
+ // Both symbols present
380
+ (0, vitest_1.expect)(out).toContain('(symbol "IC_A"');
381
+ (0, vitest_1.expect)(out).toContain('(symbol "IC_B"');
382
+ // Only one library header
383
+ const headerCount = (out.match(/kicad_symbol_lib/g) || []).length;
384
+ (0, vitest_1.expect)(headerCount).toBe(1);
385
+ });
386
+ (0, vitest_1.it)("tracks symbols via getter", () => {
387
+ const lib = new KicadLibrary_1.KicadLibrary();
388
+ const sym = new KicadSymbol_1.KicadSymbol({ name: "Test" });
389
+ lib.addSymbol(sym);
390
+ (0, vitest_1.expect)(lib.symbols).toHaveLength(1);
391
+ (0, vitest_1.expect)(lib.symbols[0].name).toBe("Test");
392
+ });
393
+ (0, vitest_1.it)("tracks footprints via getter", () => {
394
+ const lib = new KicadLibrary_1.KicadLibrary();
395
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "TestFP" });
396
+ lib.addFootprint(fp);
397
+ (0, vitest_1.expect)(lib.footprints).toHaveLength(1);
398
+ (0, vitest_1.expect)(lib.footprints[0].name).toBe("TestFP");
399
+ });
400
+ (0, vitest_1.it)("supports method chaining", () => {
401
+ const lib = new KicadLibrary_1.KicadLibrary();
402
+ const result = lib
403
+ .addSymbol(new KicadSymbol_1.KicadSymbol({ name: "A" }))
404
+ .addFootprint(new KicadFootprint_1.KicadFootprint({ name: "B" }));
405
+ (0, vitest_1.expect)(result).toBe(lib);
406
+ });
407
+ (0, vitest_1.it)("writes symbol file to disk", () => {
408
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kicad-lib-test-"));
409
+ try {
410
+ const lib = new KicadLibrary_1.KicadLibrary();
411
+ lib.addSymbol(new KicadSymbol_1.KicadSymbol({ name: "TestSym" }));
412
+ const filePath = lib.writeSymbols(path.join(tmpDir, "Test.kicad_sym"));
413
+ (0, vitest_1.expect)(fs.existsSync(filePath)).toBe(true);
414
+ const content = fs.readFileSync(filePath, "utf-8");
415
+ (0, vitest_1.expect)(content).toContain("(kicad_symbol_lib");
416
+ (0, vitest_1.expect)(content).toContain('(symbol "TestSym"');
417
+ }
418
+ finally {
419
+ fs.rmSync(tmpDir, { recursive: true });
420
+ }
421
+ });
422
+ (0, vitest_1.it)("writes footprints to .pretty directory", () => {
423
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kicad-lib-test-"));
424
+ const prettyDir = path.join(tmpDir, "Lib.pretty");
425
+ try {
426
+ const lib = new KicadLibrary_1.KicadLibrary();
427
+ const fp1 = new KicadFootprint_1.KicadFootprint({ name: "FP_A" });
428
+ fp1.addPad({ number: "1", type: "smd", shape: "rect", x: 0, y: 0, width: 1, height: 1 });
429
+ const fp2 = new KicadFootprint_1.KicadFootprint({ name: "FP_B" });
430
+ fp2.addPad({ number: "1", type: "smd", shape: "rect", x: 0, y: 0, width: 2, height: 2 });
431
+ lib.addFootprint(fp1);
432
+ lib.addFootprint(fp2);
433
+ const paths = lib.writeFootprints(prettyDir);
434
+ (0, vitest_1.expect)(paths).toHaveLength(2);
435
+ (0, vitest_1.expect)(fs.existsSync(path.join(prettyDir, "FP_A.kicad_mod"))).toBe(true);
436
+ (0, vitest_1.expect)(fs.existsSync(path.join(prettyDir, "FP_B.kicad_mod"))).toBe(true);
437
+ }
438
+ finally {
439
+ fs.rmSync(tmpDir, { recursive: true });
440
+ }
441
+ });
442
+ (0, vitest_1.it)("writeAll writes both symbols and footprints", () => {
443
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kicad-lib-test-"));
444
+ try {
445
+ const lib = new KicadLibrary_1.KicadLibrary();
446
+ lib.addSymbol(new KicadSymbol_1.KicadSymbol({ name: "MySym" }));
447
+ const fp = new KicadFootprint_1.KicadFootprint({ name: "MyFP" });
448
+ fp.addPad({ number: "1", type: "smd", shape: "rect", x: 0, y: 0, width: 1, height: 1 });
449
+ lib.addFootprint(fp);
450
+ const result = lib.writeAll(tmpDir);
451
+ (0, vitest_1.expect)(fs.existsSync(result.symbolsPath)).toBe(true);
452
+ (0, vitest_1.expect)(result.footprintPaths).toHaveLength(1);
453
+ (0, vitest_1.expect)(fs.existsSync(result.footprintPaths[0])).toBe(true);
454
+ // Verify contents
455
+ const symContent = fs.readFileSync(result.symbolsPath, "utf-8");
456
+ (0, vitest_1.expect)(symContent).toContain('(symbol "MySym"');
457
+ const fpContent = fs.readFileSync(result.footprintPaths[0], "utf-8");
458
+ (0, vitest_1.expect)(fpContent).toContain('(footprint "MyFP"');
459
+ }
460
+ finally {
461
+ fs.rmSync(tmpDir, { recursive: true });
462
+ }
463
+ });
464
+ });
465
+ //# sourceMappingURL=kicad-lib.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kicad-lib.test.js","sourceRoot":"","sources":["../../../src/tests/kicad-lib.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const Component_1 = require("../synth/Component");
5
+ const Composable_1 = require("../synth/Composable");
6
+ const Layout_1 = require("../synth/Layout");
7
+ const Registry_1 = require("../synth/Registry");
8
+ const vitest_2 = require("vitest");
9
+ (0, vitest_1.describe)("Layout System", () => {
10
+ (0, vitest_2.beforeEach)(() => {
11
+ Registry_1.registry.start();
12
+ });
13
+ (0, vitest_1.it)("HBoxLayout arranges components horizontally", () => {
14
+ class HorizontalRow extends Composable_1.Composable {
15
+ constructor() {
16
+ super({
17
+ ref: "ROW",
18
+ layout: new Layout_1.HBoxLayout({ spacing: 100 })
19
+ });
20
+ }
21
+ defineInterface() {
22
+ this.c1 = new Component_1.Component({ ref: "C1", symbol: "Device:C", footprint: "Capacitor_SMD:C_0603_1608Metric" });
23
+ this.c2 = new Component_1.Component({ ref: "C2", symbol: "Device:C", footprint: "Capacitor_SMD:C_0603_1608Metric" });
24
+ return {};
25
+ }
26
+ }
27
+ const row = new HorizontalRow();
28
+ row.pins; // Initialize
29
+ (0, vitest_1.expect)(row.c1.schematicPosition?.x).toBe(0);
30
+ (0, vitest_1.expect)(row.c2.schematicPosition?.x).toBe(100);
31
+ (0, vitest_1.expect)(row.c1.schematicPosition?.y).toBe(0);
32
+ (0, vitest_1.expect)(row.c2.schematicPosition?.y).toBe(0);
33
+ });
34
+ (0, vitest_1.it)("VBoxLayout arranges components vertically", () => {
35
+ class VerticalColumn extends Composable_1.Composable {
36
+ constructor() {
37
+ super({
38
+ ref: "COL",
39
+ layout: new Layout_1.VBoxLayout({ spacing: 50, x: 10, y: 10 })
40
+ });
41
+ }
42
+ defineInterface() {
43
+ this.c1 = new Component_1.Component({ ref: "C1", symbol: "Device:C", footprint: "Capacitor_SMD:C_0603_1608Metric" });
44
+ this.c2 = new Component_1.Component({ ref: "C2", symbol: "Device:C", footprint: "Capacitor_SMD:C_0603_1608Metric" });
45
+ return {};
46
+ }
47
+ }
48
+ const col = new VerticalColumn();
49
+ col.pins; // Initialize
50
+ (0, vitest_1.expect)(col.c1.schematicPosition?.x).toBe(10);
51
+ (0, vitest_1.expect)(col.c1.schematicPosition?.y).toBe(10);
52
+ (0, vitest_1.expect)(col.c2.schematicPosition?.x).toBe(10);
53
+ (0, vitest_1.expect)(col.c2.schematicPosition?.y).toBe(60);
54
+ });
55
+ (0, vitest_1.it)("Nested layouts work correctly", () => {
56
+ class Nested extends Composable_1.Composable {
57
+ constructor() {
58
+ super({
59
+ ref: "NEST",
60
+ layout: new Layout_1.VBoxLayout({ spacing: 200 })
61
+ });
62
+ }
63
+ defineInterface() {
64
+ this.inner = new class extends Composable_1.Composable {
65
+ constructor() {
66
+ super({ ref: "I", layout: new Layout_1.HBoxLayout({ spacing: 50 }) });
67
+ }
68
+ defineInterface() {
69
+ this.c1 = new Component_1.Component({ ref: "C1", symbol: "Device:C", footprint: "Capacitor_SMD:C_0603_1608Metric" });
70
+ this.c2 = new Component_1.Component({ ref: "C2", symbol: "Device:C", footprint: "Capacitor_SMD:C_0603_1608Metric" });
71
+ return {};
72
+ }
73
+ }();
74
+ this.cOutside = new Component_1.Component({ ref: "CO", symbol: "Device:R", footprint: "Resistor_SMD:R_0603_1608Metric" });
75
+ return {};
76
+ }
77
+ }
78
+ const n = new Nested();
79
+ n.pins; // Init Nested
80
+ n.inner.pins; // Init Inner
81
+ // Inner composable position (set by Nested mapping)
82
+ (0, vitest_1.expect)(n.inner.schematicPosition?.y).toBe(0);
83
+ // Outside component position (set by Nested mapping)
84
+ (0, vitest_1.expect)(n.cOutside.schematicPosition?.y).toBe(200);
85
+ // Sub-components within inner (set by Inner mapping)
86
+ // These are local positions
87
+ const innerAny = n.inner;
88
+ (0, vitest_1.expect)(innerAny.c1.schematicPosition?.x).toBe(0);
89
+ (0, vitest_1.expect)(innerAny.c2.schematicPosition?.x).toBe(50);
90
+ });
91
+ });
92
+ //# sourceMappingURL=layout.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.test.js","sourceRoot":"","sources":["../../../src/tests/layout.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};