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.
- package/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/api/client.d.ts +66 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +94 -0
- package/dist/api/client.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +154 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +107 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +64 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +196 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +15 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/simulate.d.ts +3 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +139 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +40 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +175 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +45 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/store.d.ts +23 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +98 -0
- package/dist/config/store.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/detect.d.ts +9 -0
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/detect.js +152 -0
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/output.d.ts +8 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +41 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/spinner.d.ts +4 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +24 -0
- package/dist/utils/spinner.js.map +1 -0
- 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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|