@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,301 @@
|
|
|
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
|
+
exports.cmdExport = cmdExport;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const child_process_1 = require("child_process");
|
|
40
|
+
const config_1 = require("../config");
|
|
41
|
+
const utils_1 = require("../utils");
|
|
42
|
+
const bom_1 = require("../utils/bom");
|
|
43
|
+
const cpl_1 = require("../utils/cpl");
|
|
44
|
+
/**
|
|
45
|
+
* export: Export manufacturing files (Gerber, Drill, BOM, CPL) for JLCPCB.
|
|
46
|
+
*
|
|
47
|
+
* Generates:
|
|
48
|
+
* - Gerber files (all copper, paste, silkscreen, mask layers + edge cuts)
|
|
49
|
+
* - Drill files (Excellon format)
|
|
50
|
+
* - Drill map files (Gerber X2 format)
|
|
51
|
+
* - BOM CSV (JLCPCB format with LCSC Part #)
|
|
52
|
+
* - CPL CSV (JLCPCB pick & place format)
|
|
53
|
+
*
|
|
54
|
+
* All files are zipped into a single archive.
|
|
55
|
+
*/
|
|
56
|
+
async function cmdExport(args) {
|
|
57
|
+
const entry = args[0];
|
|
58
|
+
const schematicPath = await (0, utils_1.resolveSchematic)(entry);
|
|
59
|
+
const schematicDir = path.dirname(schematicPath);
|
|
60
|
+
const projectName = path.basename(schematicDir);
|
|
61
|
+
const { kicadCliPath } = (0, config_1.getConfig)();
|
|
62
|
+
console.log(`\nš¦ Exporting JLCPCB files: ${projectName}\n`);
|
|
63
|
+
// āā Step 0: Load the TypeScript schematic to get component registry āā
|
|
64
|
+
let components = [];
|
|
65
|
+
try {
|
|
66
|
+
const mod = require(schematicPath);
|
|
67
|
+
const schematic = mod.default;
|
|
68
|
+
if (!schematic || typeof schematic._generateWithCapture !== "function") {
|
|
69
|
+
(0, utils_1.die)(`${schematicPath} must default-export a Schematic instance.`);
|
|
70
|
+
}
|
|
71
|
+
console.log(` -> Loading circuit: ${schematic.name}...`);
|
|
72
|
+
const snapshot = schematic._generateWithCapture();
|
|
73
|
+
components = snapshot.components;
|
|
74
|
+
console.log(` -> Found ${components.length} components in circuit registry.`);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
console.warn(` ā ļø Failed to load schematic TS: ${err.message}`);
|
|
78
|
+
console.warn(` ā ļø BOM will fall back to parsing .kicad_sch if available.`);
|
|
79
|
+
}
|
|
80
|
+
// āā Step 1: Find the .kicad_pcb file āā
|
|
81
|
+
let pcbFile = path.join(schematicDir, `${projectName}.kicad_pcb`);
|
|
82
|
+
if (!fs.existsSync(pcbFile)) {
|
|
83
|
+
const files = fs
|
|
84
|
+
.readdirSync(schematicDir)
|
|
85
|
+
.filter((f) => f.endsWith(".kicad_pcb") && !f.startsWith("_autosave"));
|
|
86
|
+
if (files.length === 0) {
|
|
87
|
+
(0, utils_1.die)(`No .kicad_pcb file found in ${schematicDir}. Have you opened and saved it in KiCad?`);
|
|
88
|
+
}
|
|
89
|
+
pcbFile = path.join(schematicDir, files[0]);
|
|
90
|
+
}
|
|
91
|
+
console.log(` -> PCB file: ${path.basename(pcbFile)}`);
|
|
92
|
+
// āā Output directories āā
|
|
93
|
+
const outputBase = path.join(schematicDir, "jlcpcb");
|
|
94
|
+
const gerberDir = path.join(outputBase, "gerbers");
|
|
95
|
+
// Clean and recreate
|
|
96
|
+
if (fs.existsSync(outputBase)) {
|
|
97
|
+
fs.rmSync(outputBase, { recursive: true, force: true });
|
|
98
|
+
}
|
|
99
|
+
fs.mkdirSync(gerberDir, { recursive: true });
|
|
100
|
+
try {
|
|
101
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
102
|
+
// 1. GERBER FILES
|
|
103
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
104
|
+
// Layers: All copper, all paste, all silkscreen, all mask, edge cuts
|
|
105
|
+
// Options:
|
|
106
|
+
// - Check zone fills before plotting (handled by KiCad internally)
|
|
107
|
+
// - Tent vias (default behavior)
|
|
108
|
+
// - Use Protel filename extensions (default, --no-protel-ext omitted)
|
|
109
|
+
// - Subtract soldermask from silkscreen (--subtract-soldermask)
|
|
110
|
+
console.log(" -> Generating Gerber files...");
|
|
111
|
+
(0, child_process_1.execSync)([
|
|
112
|
+
`"${kicadCliPath}"`,
|
|
113
|
+
"pcb", "export", "gerbers",
|
|
114
|
+
`--output`, `"${gerberDir}/"`,
|
|
115
|
+
`--layers`, `"F.Cu,B.Cu,F.Paste,B.Paste,F.Silkscreen,B.Silkscreen,F.Mask,B.Mask,Edge.Cuts"`,
|
|
116
|
+
`--subtract-soldermask`,
|
|
117
|
+
`"${pcbFile}"`,
|
|
118
|
+
].join(" "), { stdio: "pipe" });
|
|
119
|
+
console.log(" ā Gerber files generated (Protel extensions, soldermask subtracted)");
|
|
120
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
121
|
+
// 2. DRILL FILES
|
|
122
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
123
|
+
// Options:
|
|
124
|
+
// - Format: Excellon
|
|
125
|
+
// - Oval Holes Drill Mode: alternate (--excellon-oval-format alternate)
|
|
126
|
+
// - Drill Origin: absolute (--drill-origin absolute)
|
|
127
|
+
// - Drill Units: mm (--excellon-units mm)
|
|
128
|
+
// - Zeros Format: decimal (--excellon-zeros-format decimal)
|
|
129
|
+
console.log(" -> Generating Drill files...");
|
|
130
|
+
(0, child_process_1.execSync)([
|
|
131
|
+
`"${kicadCliPath}"`,
|
|
132
|
+
"pcb", "export", "drill",
|
|
133
|
+
`--output`, `"${gerberDir}/"`,
|
|
134
|
+
`--format`, `excellon`,
|
|
135
|
+
`--drill-origin`, `absolute`,
|
|
136
|
+
`--excellon-units`, `mm`,
|
|
137
|
+
`--excellon-zeros-format`, `decimal`,
|
|
138
|
+
`--excellon-oval-format`, `alternate`,
|
|
139
|
+
`"${pcbFile}"`,
|
|
140
|
+
].join(" "), { stdio: "pipe" });
|
|
141
|
+
console.log(" ā Drill files generated (absolute origin, mm, decimal zeros, alternate oval)");
|
|
142
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
143
|
+
// 3. DRILL MAP FILES
|
|
144
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
145
|
+
// Generate drill map in Gerber X2 format
|
|
146
|
+
console.log(" -> Generating Drill Map files...");
|
|
147
|
+
(0, child_process_1.execSync)([
|
|
148
|
+
`"${kicadCliPath}"`,
|
|
149
|
+
"pcb", "export", "drill",
|
|
150
|
+
`--output`, `"${gerberDir}/"`,
|
|
151
|
+
`--format`, `excellon`,
|
|
152
|
+
`--drill-origin`, `absolute`,
|
|
153
|
+
`--excellon-units`, `mm`,
|
|
154
|
+
`--excellon-zeros-format`, `decimal`,
|
|
155
|
+
`--excellon-oval-format`, `alternate`,
|
|
156
|
+
`--generate-map`,
|
|
157
|
+
`--map-format`, `gerberx2`,
|
|
158
|
+
`"${pcbFile}"`,
|
|
159
|
+
].join(" "), { stdio: "pipe" });
|
|
160
|
+
console.log(" ā Drill map generated (Gerber X2 format)");
|
|
161
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
162
|
+
// 4. CPL FILE (Component Placement List)
|
|
163
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
164
|
+
// KiCad generates ASCII pos ā we convert to JLCPCB CSV format
|
|
165
|
+
console.log(" -> Generating CPL (Pick & Place) file...");
|
|
166
|
+
// First export in ASCII format (which we can parse reliably)
|
|
167
|
+
const rawPosFile = path.join(outputBase, `_raw_pos_${projectName}.txt`);
|
|
168
|
+
(0, child_process_1.execSync)([
|
|
169
|
+
`"${kicadCliPath}"`,
|
|
170
|
+
"pcb", "export", "pos",
|
|
171
|
+
`--output`, `"${rawPosFile}"`,
|
|
172
|
+
`--format`, `ascii`,
|
|
173
|
+
`--units`, `mm`,
|
|
174
|
+
`--side`, `both`,
|
|
175
|
+
`--exclude-dnp`,
|
|
176
|
+
`"${pcbFile}"`,
|
|
177
|
+
].join(" "), { stdio: "pipe" });
|
|
178
|
+
// Convert KiCad pos output ā JLCPCB CPL format
|
|
179
|
+
const cplFile = path.join(outputBase, `CPL-${projectName}.csv`);
|
|
180
|
+
(0, cpl_1.convertPosToCpl)(rawPosFile, cplFile);
|
|
181
|
+
// Clean up raw file
|
|
182
|
+
fs.unlinkSync(rawPosFile);
|
|
183
|
+
console.log(" ā CPL file generated (JLCPCB format)");
|
|
184
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
185
|
+
// 5. BOM FILE
|
|
186
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
187
|
+
let bomFile = null;
|
|
188
|
+
if (components.length > 0) {
|
|
189
|
+
// Generate BOM from our TypeScript circuit registry
|
|
190
|
+
bomFile = (0, bom_1.generateBom)(projectName, outputBase, components);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.warn(" ā ļø No components loaded from TS circuit. Skipping BOM generation.");
|
|
194
|
+
}
|
|
195
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
196
|
+
// 6. 3D RENDERS
|
|
197
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
198
|
+
console.log(" -> Generating 3D renders...");
|
|
199
|
+
const renderDir = path.join(outputBase, "renders");
|
|
200
|
+
fs.mkdirSync(renderDir, { recursive: true });
|
|
201
|
+
const topRender = path.join(renderDir, `${projectName}-top.png`);
|
|
202
|
+
const bottomRender = path.join(renderDir, `${projectName}-bottom.png`);
|
|
203
|
+
try {
|
|
204
|
+
(0, child_process_1.execSync)([
|
|
205
|
+
`"${kicadCliPath}"`,
|
|
206
|
+
"pcb",
|
|
207
|
+
"render",
|
|
208
|
+
"--output",
|
|
209
|
+
`"${topRender}"`,
|
|
210
|
+
"--side",
|
|
211
|
+
"top",
|
|
212
|
+
"--width",
|
|
213
|
+
"2048",
|
|
214
|
+
"--height",
|
|
215
|
+
"1536",
|
|
216
|
+
"--quality",
|
|
217
|
+
"high",
|
|
218
|
+
`"${pcbFile}"`,
|
|
219
|
+
].join(" "), { stdio: "pipe" });
|
|
220
|
+
(0, child_process_1.execSync)([
|
|
221
|
+
`"${kicadCliPath}"`,
|
|
222
|
+
"pcb",
|
|
223
|
+
"render",
|
|
224
|
+
"--output",
|
|
225
|
+
`"${bottomRender}"`,
|
|
226
|
+
"--side",
|
|
227
|
+
"bottom",
|
|
228
|
+
"--width",
|
|
229
|
+
"2048",
|
|
230
|
+
"--height",
|
|
231
|
+
"1536",
|
|
232
|
+
"--quality",
|
|
233
|
+
"high",
|
|
234
|
+
`"${pcbFile}"`,
|
|
235
|
+
].join(" "), { stdio: "pipe" });
|
|
236
|
+
const angledRender = path.join(renderDir, `${projectName}-angled.png`);
|
|
237
|
+
(0, child_process_1.execSync)([
|
|
238
|
+
`"${kicadCliPath}"`,
|
|
239
|
+
"pcb",
|
|
240
|
+
"render",
|
|
241
|
+
"--output",
|
|
242
|
+
`"${angledRender}"`,
|
|
243
|
+
"--rotate",
|
|
244
|
+
"315,0,45",
|
|
245
|
+
"--width",
|
|
246
|
+
"2048",
|
|
247
|
+
"--height",
|
|
248
|
+
"1536",
|
|
249
|
+
"--quality",
|
|
250
|
+
"high",
|
|
251
|
+
`"${pcbFile}"`,
|
|
252
|
+
].join(" "), { stdio: "pipe" });
|
|
253
|
+
console.log(" ā 3D renders generated (top, bottom, angled)");
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
console.warn(` ā ļø 3D rendering failed: ${err.message}`);
|
|
257
|
+
}
|
|
258
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
259
|
+
// 7. ZIP ARCHIVE
|
|
260
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
261
|
+
const zipFile = path.join(schematicDir, `JLCPCB-${projectName}.zip`);
|
|
262
|
+
if (fs.existsSync(zipFile)) {
|
|
263
|
+
fs.unlinkSync(zipFile);
|
|
264
|
+
}
|
|
265
|
+
console.log(` -> Creating ZIP archive: ${path.basename(zipFile)}`);
|
|
266
|
+
// Collect all files to zip
|
|
267
|
+
const filesToZip = [];
|
|
268
|
+
// Add gerber + drill files
|
|
269
|
+
const gerberFiles = fs.readdirSync(gerberDir).map((f) => path.join(gerberDir, f));
|
|
270
|
+
filesToZip.push(...gerberFiles);
|
|
271
|
+
// Add CPL
|
|
272
|
+
if (fs.existsSync(cplFile)) {
|
|
273
|
+
filesToZip.push(cplFile);
|
|
274
|
+
}
|
|
275
|
+
// Add BOM
|
|
276
|
+
if (bomFile && fs.existsSync(bomFile)) {
|
|
277
|
+
filesToZip.push(bomFile);
|
|
278
|
+
}
|
|
279
|
+
// Use system zip with -j (junk paths = flat archive)
|
|
280
|
+
const fileArgs = filesToZip.map((f) => `"${f}"`).join(" ");
|
|
281
|
+
(0, child_process_1.execSync)(`zip -j "${zipFile}" ${fileArgs}`, { stdio: "pipe" });
|
|
282
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
283
|
+
// Summary
|
|
284
|
+
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
285
|
+
const gerberCount = fs.readdirSync(gerberDir).length;
|
|
286
|
+
console.log(`\nā
JLCPCB export successful!`);
|
|
287
|
+
console.log(` š ZIP archive: ${zipFile}`);
|
|
288
|
+
console.log(` š Manufacturing files: ${outputBase}`);
|
|
289
|
+
console.log(` ⢠${gerberCount} Gerber/Drill files`);
|
|
290
|
+
if (bomFile)
|
|
291
|
+
console.log(` ⢠BOM: ${path.basename(bomFile)}`);
|
|
292
|
+
console.log(` ⢠CPL: ${path.basename(cplFile)}`);
|
|
293
|
+
if (fs.existsSync(topRender)) {
|
|
294
|
+
console.log(` ⢠Renders: ${path.basename(topRender)}, ${path.basename(bottomRender)}, ${path.basename(path.join(renderDir, `${projectName}-angled.png`))}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
(0, utils_1.die)(`Export failed: ${err.message}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib: Generate / update the KiCad library from TypeScript definitions.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* npm run lib
|
|
6
|
+
*
|
|
7
|
+
* Automatically scans src/module for all modules and generates symbols/footprints.
|
|
8
|
+
* Also generates 3D models when make3DModel() is implemented.
|
|
9
|
+
*/
|
|
10
|
+
export declare function cmdLib(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,158 @@
|
|
|
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
|
+
exports.cmdLib = cmdLib;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const config_1 = require("../config");
|
|
40
|
+
const utils_1 = require("../utils");
|
|
41
|
+
const validate_1 = require("./validate");
|
|
42
|
+
/**
|
|
43
|
+
* lib: Generate / update the KiCad library from TypeScript definitions.
|
|
44
|
+
*
|
|
45
|
+
* Usage:
|
|
46
|
+
* npm run lib
|
|
47
|
+
*
|
|
48
|
+
* Automatically scans src/module for all modules and generates symbols/footprints.
|
|
49
|
+
* Also generates 3D models when make3DModel() is implemented.
|
|
50
|
+
*/
|
|
51
|
+
async function cmdLib(args) {
|
|
52
|
+
console.log(`\nš KiCad Library Generator`);
|
|
53
|
+
const { projectRoot, sourceRoot } = (0, config_1.getConfig)();
|
|
54
|
+
const LIB_DIR = path.join(projectRoot, ".kicad");
|
|
55
|
+
const SYMBOLS_FILE = path.join(LIB_DIR, "Project_Symbols.kicad_sym");
|
|
56
|
+
const FOOTPRINTS_DIR = path.join(LIB_DIR, "Project_Footprints.pretty");
|
|
57
|
+
const MODELS_3D_DIR = path.join(LIB_DIR, "3d");
|
|
58
|
+
const MODULES_DIR = path.join(sourceRoot, "module");
|
|
59
|
+
const { KicadLibrary } = require("../../synth/KicadLibrary");
|
|
60
|
+
const mergedLib = new KicadLibrary();
|
|
61
|
+
if (!fs.existsSync(MODULES_DIR)) {
|
|
62
|
+
(0, utils_1.die)(`Modules directory not found: ${MODULES_DIR}`);
|
|
63
|
+
}
|
|
64
|
+
const files = fs.readdirSync(MODULES_DIR)
|
|
65
|
+
.filter(file => file.endsWith(".ts") && !file.endsWith(".test.ts") && file !== "index.ts");
|
|
66
|
+
if (files.length === 0) {
|
|
67
|
+
console.log(" ā ļø No modules found in src/module.");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Track footprints by class name so we can attach 3D models
|
|
71
|
+
const footprintsByClass = new Map();
|
|
72
|
+
const classesWithMake3D = [];
|
|
73
|
+
for (const file of files) {
|
|
74
|
+
const className = path.basename(file, ".ts");
|
|
75
|
+
const modulePath = path.join(MODULES_DIR, file);
|
|
76
|
+
console.log(` ā Processing: ${className} (${file})`);
|
|
77
|
+
try {
|
|
78
|
+
// Clear cache to ensure we get fresh definitions
|
|
79
|
+
delete require.cache[require.resolve(modulePath)];
|
|
80
|
+
const mod = require(modulePath);
|
|
81
|
+
const Class = mod[className];
|
|
82
|
+
if (!Class) {
|
|
83
|
+
console.warn(` ā ļø Warning: Could not find named export "${className}" in ${file}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (typeof Class.makeFootprint === "function") {
|
|
87
|
+
const fp = Class.makeFootprint();
|
|
88
|
+
mergedLib.addFootprint(fp);
|
|
89
|
+
footprintsByClass.set(className, fp);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.warn(` ā ļø Warning: ${className} has no static makeFootprint() method.`);
|
|
93
|
+
}
|
|
94
|
+
if (typeof Class.makeSymbol === "function") {
|
|
95
|
+
mergedLib.addSymbol(Class.makeSymbol());
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.warn(` ā ļø Warning: ${className} has no static makeSymbol() method.`);
|
|
99
|
+
}
|
|
100
|
+
// Check for 3D model support
|
|
101
|
+
if (typeof Class.make3DModel === "function") {
|
|
102
|
+
classesWithMake3D.push({ className, Class });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
console.error(` ā Error processing module ${className}: ${err.message}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const symbolCount = mergedLib.symbols.length;
|
|
110
|
+
const footprintCount = mergedLib.footprints.length;
|
|
111
|
+
if (symbolCount === 0 && footprintCount === 0) {
|
|
112
|
+
console.log("\n ā ļø No symbols or footprints were successfully generated.");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Generate 3D models
|
|
116
|
+
if (classesWithMake3D.length > 0) {
|
|
117
|
+
console.log(`\nš§ Generating 3D models...`);
|
|
118
|
+
for (const { className, Class } of classesWithMake3D) {
|
|
119
|
+
try {
|
|
120
|
+
const modelResult = Class.make3DModel();
|
|
121
|
+
const model = modelResult && typeof modelResult.then === "function"
|
|
122
|
+
? await modelResult
|
|
123
|
+
: modelResult;
|
|
124
|
+
if (model) {
|
|
125
|
+
const result = await model.export({
|
|
126
|
+
outDir: MODELS_3D_DIR,
|
|
127
|
+
baseName: className,
|
|
128
|
+
formats: ["wrl"],
|
|
129
|
+
});
|
|
130
|
+
if (result.wrlPath) {
|
|
131
|
+
// Link the 3D model into the footprint
|
|
132
|
+
const fp = footprintsByClass.get(className);
|
|
133
|
+
if (fp && typeof fp.set3DModel === "function") {
|
|
134
|
+
fp.set3DModel({ path: result.wrlPath });
|
|
135
|
+
}
|
|
136
|
+
console.log(` ā
3D Model ā .kicad/3d/${className}.wrl`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
console.error(` ā Error generating 3D model for ${className}: ${err?.message ?? err}`);
|
|
142
|
+
if (err?.stack)
|
|
143
|
+
console.error(err.stack);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
console.log(`\nš¦ Writing library: ${symbolCount} symbol(s), ${footprintCount} footprint(s)\n`);
|
|
148
|
+
if (symbolCount > 0) {
|
|
149
|
+
mergedLib.writeSymbols(SYMBOLS_FILE);
|
|
150
|
+
console.log(` ā
Symbols ā ${path.relative(projectRoot, SYMBOLS_FILE)}`);
|
|
151
|
+
}
|
|
152
|
+
if (footprintCount > 0) {
|
|
153
|
+
const paths = mergedLib.writeFootprints(FOOTPRINTS_DIR);
|
|
154
|
+
console.log(` ā
Footprints ā ${path.relative(projectRoot, FOOTPRINTS_DIR)}/`);
|
|
155
|
+
}
|
|
156
|
+
await (0, validate_1.cmdValidate)(args);
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../../src/cli/commands/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
exports.cmdParts = cmdParts;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const readline = __importStar(require("readline"));
|
|
39
|
+
const child_process_1 = require("child_process");
|
|
40
|
+
const config_1 = require("../config");
|
|
41
|
+
const utils_1 = require("../utils");
|
|
42
|
+
/**
|
|
43
|
+
* parts: Search JLC Parts for components
|
|
44
|
+
*/
|
|
45
|
+
async function cmdParts(args) {
|
|
46
|
+
const { projectRoot, pythonPath, scriptsDir } = (0, config_1.getConfig)();
|
|
47
|
+
let footprint;
|
|
48
|
+
let value;
|
|
49
|
+
// Parse --footprint and --value flags
|
|
50
|
+
for (let i = 0; i < args.length; i++) {
|
|
51
|
+
if (args[i] === "--footprint" && args[i + 1]) {
|
|
52
|
+
footprint = args[++i];
|
|
53
|
+
}
|
|
54
|
+
else if (args[i] === "--value" && args[i + 1]) {
|
|
55
|
+
value = args[++i];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (footprint || value) {
|
|
59
|
+
// Direct search mode
|
|
60
|
+
console.log(`\nš Searching JLC Parts...`);
|
|
61
|
+
if (footprint)
|
|
62
|
+
console.log(` Footprint: ${footprint}`);
|
|
63
|
+
if (value)
|
|
64
|
+
console.log(` Value: ${value}`);
|
|
65
|
+
console.log();
|
|
66
|
+
// Delegate to existing search script
|
|
67
|
+
const searchArgs = [footprint, value].filter(Boolean).join(" ");
|
|
68
|
+
try {
|
|
69
|
+
(0, child_process_1.execSync)(`${pythonPath} ${path.join(scriptsDir, "search_lib.py")} --jlc "${searchArgs}"`, {
|
|
70
|
+
cwd: projectRoot,
|
|
71
|
+
stdio: "inherit",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
(0, utils_1.die)("Parts search failed.");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Interactive TUI mode
|
|
80
|
+
console.log("\nš JLC Parts Search (Interactive)\n" + "ā".repeat(40));
|
|
81
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
82
|
+
const askAndSearch = async () => {
|
|
83
|
+
return new Promise((resolve) => {
|
|
84
|
+
rl.question("Search query (or 'q' to quit): ", async (query) => {
|
|
85
|
+
if (query.trim().toLowerCase() === "q") {
|
|
86
|
+
rl.close();
|
|
87
|
+
resolve();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
(0, child_process_1.execSync)(`${pythonPath} ${path.join(scriptsDir, "search_lib.py")} --jlc "${query.trim()}"`, { cwd: projectRoot, stdio: "inherit" });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
console.log(" (search returned no results or errored)");
|
|
95
|
+
}
|
|
96
|
+
console.log();
|
|
97
|
+
resolve(askAndSearch());
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
await askAndSearch();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../../../src/cli/commands/parts.ts"],"names":[],"mappings":"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"}
|