@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,86 @@
|
|
|
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.cmdSetup = cmdSetup;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const config_1 = require("../config");
|
|
40
|
+
/**
|
|
41
|
+
* Commands to automate configuration of the project's environment.
|
|
42
|
+
*/
|
|
43
|
+
async function cmdSetup(args) {
|
|
44
|
+
console.log("🚀 Setting up project environment...\n");
|
|
45
|
+
const { projectRoot } = (0, config_1.getConfig)();
|
|
46
|
+
const tsconfigPath = path.join(projectRoot, "tsconfig.json");
|
|
47
|
+
if (!fs.existsSync(tsconfigPath)) {
|
|
48
|
+
console.warn("⚠️ Could not find tsconfig.json in project root. Skipping path mapping setup.");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const tsconfigRaw = fs.readFileSync(tsconfigPath, "utf-8");
|
|
53
|
+
const tsconfig = JSON.parse(tsconfigRaw);
|
|
54
|
+
// Don't update tsconfig if we are in the framework repo itself
|
|
55
|
+
const packageJsonPath = path.join(projectRoot, "package.json");
|
|
56
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
57
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
58
|
+
if (pkg.name === "@tobisk/pcbs") {
|
|
59
|
+
console.log(" ℹ️ Framework repository detected. Skipping tsconfig.json path mapping setup.");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!tsconfig.compilerOptions) {
|
|
64
|
+
tsconfig.compilerOptions = {};
|
|
65
|
+
}
|
|
66
|
+
if (!tsconfig.compilerOptions.paths) {
|
|
67
|
+
tsconfig.compilerOptions.paths = {};
|
|
68
|
+
}
|
|
69
|
+
const virtualPath = "@tobisk/pcbs/kicad-types";
|
|
70
|
+
const localPath = ["./src/kicad-library.ts"];
|
|
71
|
+
// Check if mapping already exists and is correct
|
|
72
|
+
const currentMapping = tsconfig.compilerOptions.paths[virtualPath];
|
|
73
|
+
if (JSON.stringify(currentMapping) === JSON.stringify(localPath)) {
|
|
74
|
+
console.log(" ✅ tsconfig.json path mapping is already correct.");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
tsconfig.compilerOptions.paths[virtualPath] = localPath;
|
|
78
|
+
fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2), "utf-8");
|
|
79
|
+
console.log(` ✅ Added path mapping to tsconfig.json: ${virtualPath} → ${localPath}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
console.warn(` ⚠️ Failed to update tsconfig.json: ${err.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4BAiDC;AAxDD,uCAAyB;AACzB,2CAA6B;AAC7B,sCAAsC;AAEtC;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAC,IAAc;IACzC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAS,GAAE,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAE7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QAC/F,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEzC,+DAA+D;QAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;gBAC/F,OAAO;YACX,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC5B,QAAQ,CAAC,eAAe,GAAG,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAClC,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,WAAW,GAAG,0BAA0B,CAAC;QAC/C,MAAM,SAAS,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAE7C,iDAAiD;QACjD,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;YACxD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,4CAA4C,WAAW,MAAM,SAAS,EAAE,CAAC,CAAC;QAC1F,CAAC;IAEL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
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.cmdSynth = cmdSynth;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const utils_1 = require("../utils");
|
|
39
|
+
/**
|
|
40
|
+
* synth: Compile TypeScript schematic → circuit-synth Python → run synthesis
|
|
41
|
+
*/
|
|
42
|
+
async function cmdSynth(args) {
|
|
43
|
+
const entry = args[0];
|
|
44
|
+
const schematicPath = await (0, utils_1.resolveSchematic)(entry);
|
|
45
|
+
const schematicDir = path.dirname(schematicPath);
|
|
46
|
+
const schematicName = path.basename(schematicDir);
|
|
47
|
+
console.log(`\n🚀 Synthesizing: ${schematicName}\n`);
|
|
48
|
+
// Step 1: Load the TypeScript schematic
|
|
49
|
+
try {
|
|
50
|
+
const mod = require(schematicPath);
|
|
51
|
+
const schematic = mod.default;
|
|
52
|
+
if (!schematic || typeof schematic.generate !== "function") {
|
|
53
|
+
(0, utils_1.die)(`${schematicPath} must have a default export that is a Schematic instance with a generate() method.`);
|
|
54
|
+
}
|
|
55
|
+
console.log(` → Generating circuit: ${schematic.name}...`);
|
|
56
|
+
schematic.generate();
|
|
57
|
+
console.log(` ✅ Circuit generation complete.`);
|
|
58
|
+
console.log(` → Compiling to circuit-synth Python & executing...`);
|
|
59
|
+
const { generatePython } = require("../codegen");
|
|
60
|
+
const { runSynthesis } = require("../synthesis");
|
|
61
|
+
const snapshot = schematic._generateWithCapture();
|
|
62
|
+
const result = runSynthesis(snapshot, schematicDir);
|
|
63
|
+
if (result.success) {
|
|
64
|
+
console.log(` ✅ Synthesis successful!`);
|
|
65
|
+
console.log(` 📂 Output: ${schematicDir}`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
(0, utils_1.die)(`Synthesis failed:\n\n${result.output}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
(0, utils_1.die)(`Synthesis failed: ${err.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=synth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synth.js","sourceRoot":"","sources":["../../../../src/cli/commands/synth.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4BAsCC;AA5CD,2CAA6B;AAC7B,kDAA+D;AAE/D;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,MAAM,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,uBAAuB,aAAa,IAAI,CAAC,CAAC;IAEtD,wCAAwC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC3D,IAAA,WAAG,EAAC,GAAG,aAAa,oFAAoF,CAAC,CAAC;QAC5G,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;QAC5D,SAAS,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAA,WAAG,EAAC,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;IAEH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAA,WAAG,EAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cmdTypes(args: string[]): Promise<void>;
|
|
@@ -0,0 +1,140 @@
|
|
|
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.cmdTypes = cmdTypes;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const config_1 = require("../config");
|
|
40
|
+
/**
|
|
41
|
+
* Script to generate TypeScript types for KiCad symbols and footprints.
|
|
42
|
+
* Scans standard KiCad library paths on macOS and project-local libraries.
|
|
43
|
+
*/
|
|
44
|
+
const KICAD_PATH = "/Applications/KiCad/KiCad.app/Contents/SharedSupport";
|
|
45
|
+
const SYMBOLS_DIR = path.join(KICAD_PATH, "symbols");
|
|
46
|
+
const FOOTPRINTS_DIR = path.join(KICAD_PATH, "footprints");
|
|
47
|
+
function parseSymbolsInFile(filePath, libName) {
|
|
48
|
+
if (!fs.existsSync(filePath))
|
|
49
|
+
return [];
|
|
50
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
51
|
+
const names = [];
|
|
52
|
+
// Quick regex to find all (symbol "NAME" ...) top-level patterns
|
|
53
|
+
const matches = content.matchAll(/\(symbol\s+"([^"]+)"/g);
|
|
54
|
+
for (const match of matches) {
|
|
55
|
+
const symName = match[1];
|
|
56
|
+
// Skip if it contains a colon already (might be an alias or complex name)
|
|
57
|
+
if (!symName.includes(":")) {
|
|
58
|
+
names.push(`${libName}:${symName}`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
names.push(symName);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return names;
|
|
65
|
+
}
|
|
66
|
+
function getSymbolNames(projectLibDir) {
|
|
67
|
+
const names = [];
|
|
68
|
+
// System libraries
|
|
69
|
+
if (fs.existsSync(SYMBOLS_DIR)) {
|
|
70
|
+
const symbolFiles = fs.readdirSync(SYMBOLS_DIR).filter(f => f.endsWith(".kicad_sym"));
|
|
71
|
+
for (const file of symbolFiles) {
|
|
72
|
+
const libName = path.basename(file, ".kicad_sym");
|
|
73
|
+
names.push(...parseSymbolsInFile(path.join(SYMBOLS_DIR, file), libName));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Project library
|
|
77
|
+
const projectSymLib = path.join(projectLibDir, "Project_Symbols.kicad_sym");
|
|
78
|
+
if (fs.existsSync(projectSymLib)) {
|
|
79
|
+
names.push(...parseSymbolsInFile(projectSymLib, "Project_Symbols"));
|
|
80
|
+
}
|
|
81
|
+
// Built-in markers
|
|
82
|
+
names.push("Device:DNC");
|
|
83
|
+
names.push("Connector:TestPoint");
|
|
84
|
+
return [...new Set(names)].sort();
|
|
85
|
+
}
|
|
86
|
+
function getFootprintNames(projectLibDir) {
|
|
87
|
+
const names = [];
|
|
88
|
+
// System libraries
|
|
89
|
+
if (fs.existsSync(FOOTPRINTS_DIR)) {
|
|
90
|
+
const prettyDirs = fs.readdirSync(FOOTPRINTS_DIR).filter(d => d.endsWith(".pretty"));
|
|
91
|
+
for (const dir of prettyDirs) {
|
|
92
|
+
const libName = path.basename(dir, ".pretty");
|
|
93
|
+
const modFiles = fs.readdirSync(path.join(FOOTPRINTS_DIR, dir)).filter(f => f.endsWith(".kicad_mod"));
|
|
94
|
+
for (const file of modFiles) {
|
|
95
|
+
const fpName = path.basename(file, ".kicad_mod");
|
|
96
|
+
names.push(`${libName}:${fpName}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Project library
|
|
101
|
+
const projectFpLib = path.join(projectLibDir, "Project_Footprints.pretty");
|
|
102
|
+
if (fs.existsSync(projectFpLib)) {
|
|
103
|
+
const modFiles = fs.readdirSync(projectFpLib).filter(f => f.endsWith(".kicad_mod"));
|
|
104
|
+
for (const file of modFiles) {
|
|
105
|
+
const fpName = path.basename(file, ".kicad_mod");
|
|
106
|
+
names.push(`Project_Footprints:${fpName}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Built-in markers
|
|
110
|
+
names.push("DNC");
|
|
111
|
+
names.push("TestPoint:TestPoint_Pad_D2.5mm");
|
|
112
|
+
return [...new Set(names)].sort();
|
|
113
|
+
}
|
|
114
|
+
async function cmdTypes(args) {
|
|
115
|
+
console.log("🚀 Syncing KiCad library types...\n");
|
|
116
|
+
const { projectRoot } = (0, config_1.getConfig)();
|
|
117
|
+
const projectLibDir = path.join(projectRoot, ".kicad");
|
|
118
|
+
// Output file should be in the user's project src folder
|
|
119
|
+
const outputFile = path.join(projectRoot, "src/kicad-library.ts");
|
|
120
|
+
if (!fs.existsSync(path.dirname(outputFile))) {
|
|
121
|
+
fs.mkdirSync(path.dirname(outputFile), { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
const symbols = getSymbolNames(projectLibDir);
|
|
124
|
+
const footprints = getFootprintNames(projectLibDir);
|
|
125
|
+
const content = `/**
|
|
126
|
+
* AUTO-GENERATED FILE - DO NOT EDIT
|
|
127
|
+
* Generated by pcb types
|
|
128
|
+
*/
|
|
129
|
+
|
|
130
|
+
export type KicadLibrarySymbol =
|
|
131
|
+
${symbols.map(s => ` | "${s}"`).join("\n")};
|
|
132
|
+
|
|
133
|
+
export type KicadLibraryFootprint =
|
|
134
|
+
${footprints.map(f => ` | "${f}"`).join("\n")};
|
|
135
|
+
`;
|
|
136
|
+
fs.writeFileSync(outputFile, content, "utf-8");
|
|
137
|
+
console.log(` ✅ Generated ${symbols.length} symbols and ${footprints.length} footprints.`);
|
|
138
|
+
console.log(` 📂 Output: ${outputFile}`);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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.cmdValidate = cmdValidate;
|
|
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
|
+
/**
|
|
43
|
+
* validate: Verify that the generated KiCad libraries are valid and parsable.
|
|
44
|
+
* Uses kicad-cli to attempt an export to SVG (hidden).
|
|
45
|
+
*/
|
|
46
|
+
async function cmdValidate(args) {
|
|
47
|
+
console.log(`\n🔍 Validating KiCad Libraries...`);
|
|
48
|
+
const { projectRoot, kicadCliPath } = (0, config_1.getConfig)();
|
|
49
|
+
const LIB_DIR = path.join(projectRoot, ".kicad");
|
|
50
|
+
const SYMBOLS_FILE = path.join(LIB_DIR, "Project_Symbols.kicad_sym");
|
|
51
|
+
const FOOTPRINTS_DIR = path.join(LIB_DIR, "Project_Footprints.pretty");
|
|
52
|
+
if (!fs.existsSync(kicadCliPath)) {
|
|
53
|
+
(0, utils_1.die)(`kicad-cli not found at ${kicadCliPath}. Please ensure KiCad is installed.`);
|
|
54
|
+
}
|
|
55
|
+
const tmpDir = path.join(projectRoot, "tmp", "validation");
|
|
56
|
+
if (!fs.existsSync(tmpDir)) {
|
|
57
|
+
fs.mkdirSync(tmpDir, { recursive: true });
|
|
58
|
+
}
|
|
59
|
+
let hasErrors = false;
|
|
60
|
+
// 1. Validate Symbols
|
|
61
|
+
if (fs.existsSync(SYMBOLS_FILE)) {
|
|
62
|
+
console.log(` → Validating Symbols: ${path.relative(projectRoot, SYMBOLS_FILE)}`);
|
|
63
|
+
try {
|
|
64
|
+
// We use 'sym export svg' as a parser check
|
|
65
|
+
(0, child_process_1.execSync)(`"${kicadCliPath}" sym export svg "${SYMBOLS_FILE}" --output "${tmpDir}"`, { stdio: "pipe" });
|
|
66
|
+
console.log(` ✅ Symbols are valid.`);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(` ❌ Symbol Validation Failed:\n${err.stderr.toString()}`);
|
|
70
|
+
hasErrors = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(` ⚠️ Symbols file not found, skipping.`);
|
|
75
|
+
}
|
|
76
|
+
// 2. Validate Footprints
|
|
77
|
+
if (fs.existsSync(FOOTPRINTS_DIR)) {
|
|
78
|
+
console.log(` → Validating Footprints: ${path.relative(projectRoot, FOOTPRINTS_DIR)}/`);
|
|
79
|
+
try {
|
|
80
|
+
// We use 'fp export svg' as a parser check
|
|
81
|
+
(0, child_process_1.execSync)(`"${kicadCliPath}" fp export svg "${FOOTPRINTS_DIR}" --output "${tmpDir}"`, { stdio: "pipe" });
|
|
82
|
+
console.log(` ✅ Footprints are valid.`);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.error(` ❌ Footprint Validation Failed:\n${err.stderr.toString()}`);
|
|
86
|
+
hasErrors = true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log(` ⚠️ Footprints directory not found, skipping.`);
|
|
91
|
+
}
|
|
92
|
+
// Cleanup
|
|
93
|
+
try {
|
|
94
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
95
|
+
}
|
|
96
|
+
catch (err) { }
|
|
97
|
+
if (hasErrors) {
|
|
98
|
+
console.log(`\n❌ Library validation failed.\n`);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(`\n✨ Library validation successful!\n`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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.getConfig = getConfig;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
let configCache = null;
|
|
40
|
+
function getConfig() {
|
|
41
|
+
if (configCache)
|
|
42
|
+
return configCache;
|
|
43
|
+
const cwd = process.env.INIT_CWD || process.cwd();
|
|
44
|
+
let sourceRoot = cwd;
|
|
45
|
+
// 1. Env var
|
|
46
|
+
if (process.env.SCHEMATICS_ROOT) {
|
|
47
|
+
sourceRoot = path.resolve(cwd, process.env.SCHEMATICS_ROOT);
|
|
48
|
+
}
|
|
49
|
+
// 2. Default: check if src exists in cwd
|
|
50
|
+
else if (fs.existsSync(path.join(cwd, "src"))) {
|
|
51
|
+
sourceRoot = path.join(cwd, "src");
|
|
52
|
+
}
|
|
53
|
+
// 3. Fallback: cwd is sourceRoot
|
|
54
|
+
// Determine project root (if sourceRoot ends with src, projectRoot is parent)
|
|
55
|
+
let projectRoot = sourceRoot;
|
|
56
|
+
if (path.basename(sourceRoot) === "src") {
|
|
57
|
+
projectRoot = path.dirname(sourceRoot);
|
|
58
|
+
}
|
|
59
|
+
// Schematics dir: look for "schematics" in sourceRoot
|
|
60
|
+
const schematicsDir = path.join(sourceRoot, "schematics");
|
|
61
|
+
// Scripts dir: stored in the library package
|
|
62
|
+
const scriptsDir = path.resolve(__dirname, "../../scripts");
|
|
63
|
+
// Python path: look in projectRoot/.venv
|
|
64
|
+
let pythonPath = path.join(projectRoot, ".venv", "bin", "python");
|
|
65
|
+
if (!fs.existsSync(pythonPath)) {
|
|
66
|
+
// If not found, try system python
|
|
67
|
+
pythonPath = "python3";
|
|
68
|
+
}
|
|
69
|
+
const kicadCliPath = "/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli";
|
|
70
|
+
configCache = {
|
|
71
|
+
projectRoot,
|
|
72
|
+
sourceRoot,
|
|
73
|
+
schematicsDir,
|
|
74
|
+
scriptsDir,
|
|
75
|
+
pythonPath,
|
|
76
|
+
kicadCliPath,
|
|
77
|
+
};
|
|
78
|
+
return configCache;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,8BA+CC;AA7DD,2CAA6B;AAC7B,uCAAyB;AAWzB,IAAI,WAAW,GAAkB,IAAI,CAAC;AAEtC,SAAgB,SAAS;IACrB,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,IAAI,UAAU,GAAG,GAAG,CAAC;IAErB,aAAa;IACb,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC9B,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAChE,CAAC;IACD,yCAAyC;SACpC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5C,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IACD,iCAAiC;IAEjC,8EAA8E;IAC9E,IAAI,WAAW,GAAG,UAAU,CAAC;IAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;QACtC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,sDAAsD;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE1D,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAE5D,yCAAyC;IACzC,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,kCAAkC;QAClC,UAAU,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,wDAAwD,CAAC;IAE9E,WAAW,GAAG;QACV,WAAW;QACX,UAAU;QACV,aAAa;QACb,UAAU;QACV,UAAU;QACV,YAAY;KACf,CAAC;IAEF,OAAO,WAAW,CAAC;AACvB,CAAC"}
|