icaruspcb-cli 1.0.1

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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/dist/api/client.d.ts +66 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +94 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/commands/generate.d.ts +3 -0
  8. package/dist/commands/generate.d.ts.map +1 -0
  9. package/dist/commands/generate.js +154 -0
  10. package/dist/commands/generate.js.map +1 -0
  11. package/dist/commands/init.d.ts +3 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +107 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/list.d.ts +3 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +64 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/login.d.ts +3 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +196 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +3 -0
  24. package/dist/commands/logout.d.ts.map +1 -0
  25. package/dist/commands/logout.js +15 -0
  26. package/dist/commands/logout.js.map +1 -0
  27. package/dist/commands/simulate.d.ts +3 -0
  28. package/dist/commands/simulate.d.ts.map +1 -0
  29. package/dist/commands/simulate.js +139 -0
  30. package/dist/commands/simulate.js.map +1 -0
  31. package/dist/commands/status.d.ts +3 -0
  32. package/dist/commands/status.d.ts.map +1 -0
  33. package/dist/commands/status.js +40 -0
  34. package/dist/commands/status.js.map +1 -0
  35. package/dist/commands/validate.d.ts +3 -0
  36. package/dist/commands/validate.d.ts.map +1 -0
  37. package/dist/commands/validate.js +175 -0
  38. package/dist/commands/validate.js.map +1 -0
  39. package/dist/commands/whoami.d.ts +3 -0
  40. package/dist/commands/whoami.d.ts.map +1 -0
  41. package/dist/commands/whoami.js +45 -0
  42. package/dist/commands/whoami.js.map +1 -0
  43. package/dist/config/store.d.ts +23 -0
  44. package/dist/config/store.d.ts.map +1 -0
  45. package/dist/config/store.js +98 -0
  46. package/dist/config/store.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +29 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/utils/detect.d.ts +9 -0
  52. package/dist/utils/detect.d.ts.map +1 -0
  53. package/dist/utils/detect.js +152 -0
  54. package/dist/utils/detect.js.map +1 -0
  55. package/dist/utils/output.d.ts +8 -0
  56. package/dist/utils/output.d.ts.map +1 -0
  57. package/dist/utils/output.js +41 -0
  58. package/dist/utils/output.js.map +1 -0
  59. package/dist/utils/spinner.d.ts +4 -0
  60. package/dist/utils/spinner.d.ts.map +1 -0
  61. package/dist/utils/spinner.js +24 -0
  62. package/dist/utils/spinner.js.map +1 -0
  63. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC5D"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerWhoamiCommand = registerWhoamiCommand;
4
+ const store_1 = require("../config/store");
5
+ const output_1 = require("../utils/output");
6
+ const spinner_1 = require("../utils/spinner");
7
+ const client_1 = require("../api/client");
8
+ function registerWhoamiCommand(program) {
9
+ program
10
+ .command('whoami')
11
+ .description('Show current authenticated user')
12
+ .action(async () => {
13
+ try {
14
+ const key = (0, store_1.getApiKey)();
15
+ if (!key) {
16
+ (0, output_1.printError)('Not logged in. Run `icaruspcb login` to authenticate.');
17
+ process.exit(1);
18
+ }
19
+ const result = await (0, spinner_1.withSpinner)('Checking credentials...', async () => {
20
+ const client = new client_1.ApiClient();
21
+ return client.validateKey();
22
+ });
23
+ if (!result.valid) {
24
+ (0, output_1.printError)('API key is invalid or expired. Run `icaruspcb login` to re-authenticate.');
25
+ process.exit(1);
26
+ }
27
+ const config = (0, store_1.readConfig)();
28
+ (0, output_1.printSuccess)('Authenticated');
29
+ if (result.email || config.email)
30
+ (0, output_1.printInfo)(`Email: ${result.email || config.email}`);
31
+ if (config.name)
32
+ (0, output_1.printInfo)(`Name: ${config.name}`);
33
+ if (config.userId)
34
+ (0, output_1.printInfo)(`User ID: ${config.userId}`);
35
+ if (config.lastLogin)
36
+ (0, output_1.printInfo)(`Last login: ${config.lastLogin}`);
37
+ (0, output_1.printInfo)(`API key: ***${key.slice(-4)}`);
38
+ }
39
+ catch (err) {
40
+ (0, output_1.printError)(err.message || 'Failed to validate credentials');
41
+ process.exit(1);
42
+ }
43
+ });
44
+ }
45
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;AAMA,sDAkCC;AAvCD,2CAAwD;AACxD,4CAAsE;AACtE,8CAA+C;AAC/C,0CAA0C;AAE1C,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAA,iBAAS,GAAE,CAAC;YACxB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAA,mBAAU,EAAC,uDAAuD,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAW,EAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,MAAM,GAAG,IAAI,kBAAS,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAA,mBAAU,EAAC,0EAA0E,CAAC,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,IAAA,kBAAU,GAAE,CAAC;YAC5B,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;gBAAE,IAAA,kBAAS,EAAC,UAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACtF,IAAI,MAAM,CAAC,IAAI;gBAAE,IAAA,kBAAS,EAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,MAAM;gBAAE,IAAA,kBAAS,EAAC,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,IAAI,MAAM,CAAC,SAAS;gBAAE,IAAA,kBAAS,EAAC,eAAe,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACnE,IAAA,kBAAS,EAAC,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAA,mBAAU,EAAC,GAAG,CAAC,OAAO,IAAI,gCAAgC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface IcarusConfig {
2
+ apiKey?: string;
3
+ serverUrl?: string;
4
+ userId?: string;
5
+ email?: string;
6
+ name?: string;
7
+ lastLogin?: string;
8
+ }
9
+ export interface ProjectConfig {
10
+ mcu: string;
11
+ sensors: string[];
12
+ firmware?: string;
13
+ outputDir?: string;
14
+ }
15
+ export declare function readConfig(): IcarusConfig;
16
+ export declare function writeConfig(config: IcarusConfig): void;
17
+ export declare function clearConfig(): void;
18
+ export declare function getApiKey(): string | undefined;
19
+ export declare function getServerUrl(): string;
20
+ export declare function getConfigPath(): string;
21
+ export declare function readProjectConfig(dir?: string): ProjectConfig | null;
22
+ export declare function writeProjectConfig(config: ProjectConfig, dir?: string): void;
23
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,wBAAgB,UAAU,IAAI,YAAY,CAOzC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGtD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAG5E"}
@@ -0,0 +1,98 @@
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.readConfig = readConfig;
37
+ exports.writeConfig = writeConfig;
38
+ exports.clearConfig = clearConfig;
39
+ exports.getApiKey = getApiKey;
40
+ exports.getServerUrl = getServerUrl;
41
+ exports.getConfigPath = getConfigPath;
42
+ exports.readProjectConfig = readProjectConfig;
43
+ exports.writeProjectConfig = writeProjectConfig;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const os = __importStar(require("os"));
47
+ const CONFIG_DIR = path.join(os.homedir(), '.icaruspcb');
48
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
49
+ const PROJECT_FILE = '.icaruspcb.json';
50
+ function ensureConfigDir() {
51
+ if (!fs.existsSync(CONFIG_DIR)) {
52
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
53
+ }
54
+ }
55
+ function readConfig() {
56
+ if (!fs.existsSync(CONFIG_FILE))
57
+ return {};
58
+ try {
59
+ return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
60
+ }
61
+ catch {
62
+ return {};
63
+ }
64
+ }
65
+ function writeConfig(config) {
66
+ ensureConfigDir();
67
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n');
68
+ }
69
+ function clearConfig() {
70
+ if (fs.existsSync(CONFIG_FILE)) {
71
+ writeConfig({});
72
+ }
73
+ }
74
+ function getApiKey() {
75
+ return process.env.ICARUSPCB_API_KEY || readConfig().apiKey;
76
+ }
77
+ function getServerUrl() {
78
+ return process.env.ICARUSPCB_SERVER_URL || readConfig().serverUrl || 'https://icaruspcb.com';
79
+ }
80
+ function getConfigPath() {
81
+ return CONFIG_FILE;
82
+ }
83
+ function readProjectConfig(dir) {
84
+ const filePath = path.join(dir || process.cwd(), PROJECT_FILE);
85
+ if (!fs.existsSync(filePath))
86
+ return null;
87
+ try {
88
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ function writeProjectConfig(config, dir) {
95
+ const filePath = path.join(dir || process.cwd(), PROJECT_FILE);
96
+ fs.writeFileSync(filePath, JSON.stringify(config, null, 2) + '\n');
97
+ }
98
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,gCAOC;AAED,kCAGC;AAED,kCAIC;AAED,8BAEC;AAED,oCAEC;AAED,sCAEC;AAED,8CAQC;AAED,gDAGC;AA3ED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAkBzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC,SAAS,eAAe;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,MAAoB;IAC9C,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC;AAC9D,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,UAAU,EAAE,CAAC,SAAS,IAAI,uBAAuB,CAAC;AAC/F,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAqB,EAAE,GAAY;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC/D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const init_1 = require("./commands/init");
6
+ const simulate_1 = require("./commands/simulate");
7
+ const generate_1 = require("./commands/generate");
8
+ const validate_1 = require("./commands/validate");
9
+ const login_1 = require("./commands/login");
10
+ const logout_1 = require("./commands/logout");
11
+ const whoami_1 = require("./commands/whoami");
12
+ const status_1 = require("./commands/status");
13
+ const list_1 = require("./commands/list");
14
+ const program = new commander_1.Command();
15
+ program
16
+ .name('icaruspcb')
17
+ .description('IcarusPCB CLI \u2014 Simulate, generate, and validate embedded hardware configurations')
18
+ .version(require('../package.json').version);
19
+ (0, init_1.registerInitCommand)(program);
20
+ (0, simulate_1.registerSimulateCommand)(program);
21
+ (0, generate_1.registerGenerateCommand)(program);
22
+ (0, validate_1.registerValidateCommand)(program);
23
+ (0, login_1.registerLoginCommand)(program);
24
+ (0, logout_1.registerLogoutCommand)(program);
25
+ (0, whoami_1.registerWhoamiCommand)(program);
26
+ (0, status_1.registerStatusCommand)(program);
27
+ (0, list_1.registerListCommand)(program);
28
+ program.parse();
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAsD;AACtD,kDAA8D;AAC9D,kDAA8D;AAC9D,kDAA8D;AAC9D,4CAAwD;AACxD,8CAA0D;AAC1D,8CAA0D;AAC1D,8CAA0D;AAC1D,0CAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,wFAAwF,CAAC;KACrG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/C,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface DetectionResult {
2
+ mcu?: string;
3
+ source?: string;
4
+ ide?: string;
5
+ ideWorkspace?: string;
6
+ }
7
+ export declare function detectMcu(dir?: string): DetectionResult;
8
+ export {};
9
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/utils/detect.ts"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAiGD,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CAgCvD"}
@@ -0,0 +1,152 @@
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.detectMcu = detectMcu;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const MCU_PATTERNS = [
40
+ { pattern: /STM32F4/i, mcu: 'STM32F407VG' },
41
+ { pattern: /STM32F1/i, mcu: 'STM32F103C8' },
42
+ { pattern: /STM32F7/i, mcu: 'STM32F746ZG' },
43
+ { pattern: /STM32H7/i, mcu: 'STM32H743ZI' },
44
+ { pattern: /STM32L4/i, mcu: 'STM32L476RG' },
45
+ { pattern: /STM32G0/i, mcu: 'STM32G071RB' },
46
+ { pattern: /nRF52840/i, mcu: 'nRF52840' },
47
+ { pattern: /nRF52832/i, mcu: 'nRF52832' },
48
+ { pattern: /ESP32/i, mcu: 'ESP32' },
49
+ { pattern: /ATSAMD21/i, mcu: 'ATSAMD21G18' },
50
+ { pattern: /ATmega328/i, mcu: 'ATmega328P' },
51
+ { pattern: /RP2040/i, mcu: 'RP2040' },
52
+ { pattern: /EFR32/i, mcu: 'EFR32MG12' },
53
+ { pattern: /LPC1768/i, mcu: 'LPC1768' },
54
+ { pattern: /SAMD51/i, mcu: 'ATSAMD51J19' },
55
+ ];
56
+ const FILES_TO_CHECK = [
57
+ 'platformio.ini',
58
+ 'Makefile',
59
+ 'CMakeLists.txt',
60
+ '.mbed',
61
+ 'project.yml',
62
+ 'Cargo.toml',
63
+ 'build.zig',
64
+ ];
65
+ function detectIde(dir) {
66
+ // Check for VS Code workspace
67
+ const vscodeDir = path.join(dir, '.vscode');
68
+ if (fs.existsSync(vscodeDir)) {
69
+ const settingsPath = path.join(vscodeDir, 'settings.json');
70
+ if (fs.existsSync(settingsPath)) {
71
+ return { ide: 'vscode', workspace: vscodeDir };
72
+ }
73
+ }
74
+ // Check for VS Code workspace file
75
+ const files = fs.readdirSync(dir).filter(f => f.endsWith('.code-workspace'));
76
+ if (files.length > 0) {
77
+ return { ide: 'vscode', workspace: files[0] };
78
+ }
79
+ // Check for STM32CubeIDE project
80
+ const cubeideFiles = ['.project', '.cproject'];
81
+ const hasCubeIdeFiles = cubeideFiles.some(file => fs.existsSync(path.join(dir, file)));
82
+ if (hasCubeIdeFiles) {
83
+ // Additional check for STM32 specific files
84
+ const stm32Files = fs.readdirSync(dir).filter(f => f.endsWith('.ioc') || f.includes('STM32') || f.includes('stm32'));
85
+ if (stm32Files.length > 0) {
86
+ return { ide: 'stm32cubeide', workspace: '.project' };
87
+ }
88
+ }
89
+ // Check parent directories for workspace files (up to 3 levels)
90
+ let currentDir = path.dirname(dir);
91
+ for (let i = 0; i < 3; i++) {
92
+ if (currentDir === path.dirname(currentDir))
93
+ break; // Root directory
94
+ const parentResult = detectIdeShallow(currentDir);
95
+ if (parentResult.ide) {
96
+ return parentResult;
97
+ }
98
+ currentDir = path.dirname(currentDir);
99
+ }
100
+ return {};
101
+ }
102
+ function detectIdeShallow(dir) {
103
+ try {
104
+ if (fs.existsSync(path.join(dir, '.vscode'))) {
105
+ return { ide: 'vscode', workspace: path.join(dir, '.vscode') };
106
+ }
107
+ const files = fs.readdirSync(dir);
108
+ const workspaceFile = files.find(f => f.endsWith('.code-workspace'));
109
+ if (workspaceFile) {
110
+ return { ide: 'vscode', workspace: workspaceFile };
111
+ }
112
+ if (files.includes('.project') && files.some(f => f.endsWith('.ioc'))) {
113
+ return { ide: 'stm32cubeide', workspace: '.project' };
114
+ }
115
+ }
116
+ catch {
117
+ // Ignore errors from permission issues etc.
118
+ }
119
+ return {};
120
+ }
121
+ function detectMcu(dir) {
122
+ const cwd = dir || process.cwd();
123
+ // Detect IDE environment
124
+ const ideInfo = detectIde(cwd);
125
+ // Detect MCU from project files
126
+ for (const file of FILES_TO_CHECK) {
127
+ const filePath = path.join(cwd, file);
128
+ if (!fs.existsSync(filePath))
129
+ continue;
130
+ try {
131
+ const content = fs.readFileSync(filePath, 'utf-8');
132
+ for (const { pattern, mcu } of MCU_PATTERNS) {
133
+ if (pattern.test(content)) {
134
+ return {
135
+ mcu,
136
+ source: file,
137
+ ide: ideInfo.ide,
138
+ ideWorkspace: ideInfo.workspace
139
+ };
140
+ }
141
+ }
142
+ }
143
+ catch {
144
+ continue;
145
+ }
146
+ }
147
+ return {
148
+ ide: ideInfo.ide,
149
+ ideWorkspace: ideInfo.workspace
150
+ };
151
+ }
152
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/utils/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function printJson(data: unknown): void;
2
+ export declare function printTable(headers: string[], rows: string[][]): void;
3
+ export declare function printSuccess(msg: string): void;
4
+ export declare function printError(msg: string): void;
5
+ export declare function printJsonError(msg: string): void;
6
+ export declare function printInfo(msg: string): void;
7
+ export declare function printWarning(msg: string): void;
8
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAOpE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printJson = printJson;
7
+ exports.printTable = printTable;
8
+ exports.printSuccess = printSuccess;
9
+ exports.printError = printError;
10
+ exports.printJsonError = printJsonError;
11
+ exports.printInfo = printInfo;
12
+ exports.printWarning = printWarning;
13
+ const cli_table3_1 = __importDefault(require("cli-table3"));
14
+ const chalk_1 = __importDefault(require("chalk"));
15
+ function printJson(data) {
16
+ console.log(JSON.stringify(data, null, 2));
17
+ }
18
+ function printTable(headers, rows) {
19
+ const table = new cli_table3_1.default({
20
+ head: headers.map(h => chalk_1.default.cyan.bold(h)),
21
+ style: { head: [], border: [] },
22
+ });
23
+ rows.forEach(r => table.push(r));
24
+ console.log(table.toString());
25
+ }
26
+ function printSuccess(msg) {
27
+ console.log(chalk_1.default.green('✔') + ' ' + msg);
28
+ }
29
+ function printError(msg) {
30
+ console.error(chalk_1.default.red('✖') + ' ' + msg);
31
+ }
32
+ function printJsonError(msg) {
33
+ console.log(JSON.stringify({ status: 'error', message: msg }));
34
+ }
35
+ function printInfo(msg) {
36
+ console.log(chalk_1.default.blue('ℹ') + ' ' + msg);
37
+ }
38
+ function printWarning(msg) {
39
+ console.log(chalk_1.default.yellow('⚠') + ' ' + msg);
40
+ }
41
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":";;;;;AAGA,8BAEC;AAED,gCAOC;AAED,oCAEC;AAED,gCAEC;AAED,wCAEC;AAED,8BAEC;AAED,oCAEC;AAlCD,4DAA+B;AAC/B,kDAA0B;AAE1B,SAAgB,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,UAAU,CAAC,OAAiB,EAAE,IAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;KAChC,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Ora } from 'ora';
2
+ export declare function createSpinner(text: string): Ora;
3
+ export declare function withSpinner<T>(text: string, fn: () => Promise<T>): Promise<T>;
4
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUnF"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSpinner = createSpinner;
7
+ exports.withSpinner = withSpinner;
8
+ const ora_1 = __importDefault(require("ora"));
9
+ function createSpinner(text) {
10
+ return (0, ora_1.default)({ text, spinner: 'dots' });
11
+ }
12
+ async function withSpinner(text, fn) {
13
+ const spinner = createSpinner(text).start();
14
+ try {
15
+ const result = await fn();
16
+ spinner.succeed();
17
+ return result;
18
+ }
19
+ catch (err) {
20
+ spinner.fail();
21
+ throw err;
22
+ }
23
+ }
24
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;;;;AAEA,sCAEC;AAED,kCAUC;AAhBD,8CAA+B;AAE/B,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACxC,CAAC;AAEM,KAAK,UAAU,WAAW,CAAI,IAAY,EAAE,EAAoB;IACrE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "icaruspcb-cli",
3
+ "version": "1.0.1",
4
+ "description": "CLI tool for IcarusPCB — simulate, generate, and validate embedded hardware configurations",
5
+ "author": "IcarusPCB",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "bin": {
10
+ "icaruspcb": "dist/index.js"
11
+ },
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "ts-node src/index.ts",
18
+ "start": "node dist/index.js",
19
+ "prepublishOnly": "npm run build",
20
+ "test": "echo \"No tests yet\" && exit 0"
21
+ },
22
+ "keywords": [
23
+ "pcb",
24
+ "simulation",
25
+ "renode",
26
+ "embedded",
27
+ "hardware",
28
+ "electronics",
29
+ "firmware",
30
+ "embedded-systems",
31
+ "stm32",
32
+ "cli",
33
+ "arm",
34
+ "microcontroller",
35
+ "iot"
36
+ ],
37
+ "files": [
38
+ "dist",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/apanter265/IcarusPCB.git",
45
+ "directory": "IcarusPCB-CLI"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/apanter265/IcarusPCB/issues"
49
+ },
50
+ "homepage": "https://github.com/apanter265/IcarusPCB/tree/main/IcarusPCB-CLI#readme",
51
+ "dependencies": {
52
+ "commander": "^12.1.0",
53
+ "chalk": "^4.1.2",
54
+ "ora": "^5.4.1",
55
+ "inquirer": "^8.2.6",
56
+ "cli-table3": "^0.6.5",
57
+ "node-fetch": "^2.7.0"
58
+ },
59
+ "devDependencies": {
60
+ "typescript": "^5.5.0",
61
+ "@types/node": "^20.14.0",
62
+ "@types/inquirer": "^8.2.10",
63
+ "@types/node-fetch": "^2.6.11",
64
+ "ts-node": "^10.9.2"
65
+ }
66
+ }