amazonads-cli 0.1.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/README.md +136 -0
- package/build/amazon-ads-client.d.ts +29 -0
- package/build/amazon-ads-client.d.ts.map +1 -0
- package/build/amazon-ads-client.js +323 -0
- package/build/amazon-ads-client.js.map +1 -0
- package/build/commands/ads.d.ts +6 -0
- package/build/commands/ads.d.ts.map +1 -0
- package/build/commands/ads.js +49 -0
- package/build/commands/ads.js.map +1 -0
- package/build/commands/auth.d.ts +3 -0
- package/build/commands/auth.d.ts.map +1 -0
- package/build/commands/auth.js +176 -0
- package/build/commands/auth.js.map +1 -0
- package/build/commands/campaigns.d.ts +6 -0
- package/build/commands/campaigns.d.ts.map +1 -0
- package/build/commands/campaigns.js +175 -0
- package/build/commands/campaigns.js.map +1 -0
- package/build/commands/keywords.d.ts +6 -0
- package/build/commands/keywords.d.ts.map +1 -0
- package/build/commands/keywords.js +79 -0
- package/build/commands/keywords.js.map +1 -0
- package/build/commands/profiles.d.ts +4 -0
- package/build/commands/profiles.d.ts.map +1 -0
- package/build/commands/profiles.js +32 -0
- package/build/commands/profiles.js.map +1 -0
- package/build/commands/reports.d.ts +6 -0
- package/build/commands/reports.d.ts.map +1 -0
- package/build/commands/reports.js +37 -0
- package/build/commands/reports.js.map +1 -0
- package/build/config.d.ts +13 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +54 -0
- package/build/config.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +42 -0
- package/build/index.js.map +1 -0
- package/build/output.d.ts +8 -0
- package/build/output.d.ts.map +1 -0
- package/build/output.js +45 -0
- package/build/output.js.map +1 -0
- package/package.json +34 -0
package/build/config.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
export function getConfigPath() {
|
|
5
|
+
return path.join(os.homedir(), ".config", "amazonads-cli", "config.json");
|
|
6
|
+
}
|
|
7
|
+
export function loadConfig() {
|
|
8
|
+
const configPath = getConfigPath();
|
|
9
|
+
let fileConfig = {};
|
|
10
|
+
try {
|
|
11
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
12
|
+
fileConfig = JSON.parse(raw);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// File doesn't exist or is invalid — start with empty config
|
|
16
|
+
}
|
|
17
|
+
// Environment variables take precedence over file config
|
|
18
|
+
const config = { ...fileConfig };
|
|
19
|
+
if (process.env.AMAZON_ADS_CLIENT_ID) {
|
|
20
|
+
config.clientId = process.env.AMAZON_ADS_CLIENT_ID;
|
|
21
|
+
}
|
|
22
|
+
if (process.env.AMAZON_ADS_CLIENT_SECRET) {
|
|
23
|
+
config.clientSecret = process.env.AMAZON_ADS_CLIENT_SECRET;
|
|
24
|
+
}
|
|
25
|
+
if (process.env.AMAZON_ADS_REFRESH_TOKEN) {
|
|
26
|
+
config.refreshToken = process.env.AMAZON_ADS_REFRESH_TOKEN;
|
|
27
|
+
}
|
|
28
|
+
if (process.env.AMAZON_ADS_REGION) {
|
|
29
|
+
config.region = process.env.AMAZON_ADS_REGION;
|
|
30
|
+
}
|
|
31
|
+
if (process.env.AMAZON_ADS_SANDBOX) {
|
|
32
|
+
config.sandbox = process.env.AMAZON_ADS_SANDBOX === "true";
|
|
33
|
+
}
|
|
34
|
+
if (process.env.AMAZON_ADS_PROFILE_ID) {
|
|
35
|
+
config.defaultProfileId = process.env.AMAZON_ADS_PROFILE_ID;
|
|
36
|
+
}
|
|
37
|
+
return config;
|
|
38
|
+
}
|
|
39
|
+
export function saveConfig(config) {
|
|
40
|
+
const configPath = getConfigPath();
|
|
41
|
+
const dir = path.dirname(configPath);
|
|
42
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
43
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
44
|
+
}
|
|
45
|
+
export function deleteConfig() {
|
|
46
|
+
const configPath = getConfigPath();
|
|
47
|
+
try {
|
|
48
|
+
fs.unlinkSync(configPath);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// File doesn't exist — nothing to do
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAWpB,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,UAAU,GAAc,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;IAED,yDAAyD;IACzD,MAAM,MAAM,GAAc,EAAE,GAAG,UAAU,EAAE,CAAC;IAE5C,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QACzC,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;QACzC,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;AACH,CAAC"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC"}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { program } from "commander";
|
|
4
|
+
import { loadConfig } from "./config.js";
|
|
5
|
+
import { AmazonAdsClient } from "./amazon-ads-client.js";
|
|
6
|
+
import { printError } from "./output.js";
|
|
7
|
+
import { registerAuthCommands } from "./commands/auth.js";
|
|
8
|
+
import { registerProfilesCommands } from "./commands/profiles.js";
|
|
9
|
+
import { registerCampaignsCommands } from "./commands/campaigns.js";
|
|
10
|
+
import { registerKeywordsCommands } from "./commands/keywords.js";
|
|
11
|
+
import { registerAdsCommands } from "./commands/ads.js";
|
|
12
|
+
import { registerReportsCommands } from "./commands/reports.js";
|
|
13
|
+
const config = loadConfig();
|
|
14
|
+
const client = new AmazonAdsClient({
|
|
15
|
+
clientId: config.clientId,
|
|
16
|
+
clientSecret: config.clientSecret,
|
|
17
|
+
refreshToken: config.refreshToken,
|
|
18
|
+
region: config.region,
|
|
19
|
+
sandbox: config.sandbox,
|
|
20
|
+
});
|
|
21
|
+
function resolveProfileId(opts) {
|
|
22
|
+
const profileId = opts.profile ||
|
|
23
|
+
process.env.AMAZON_ADS_PROFILE_ID ||
|
|
24
|
+
config.defaultProfileId;
|
|
25
|
+
if (!profileId) {
|
|
26
|
+
printError("Profile ID is required. Use --profile <id>, set AMAZON_ADS_PROFILE_ID, or set defaultProfileId in config.");
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
return profileId;
|
|
30
|
+
}
|
|
31
|
+
program
|
|
32
|
+
.name("amazonads")
|
|
33
|
+
.description("Amazon Ads CLI")
|
|
34
|
+
.version("0.1.0");
|
|
35
|
+
registerAuthCommands(program);
|
|
36
|
+
registerProfilesCommands(program, client);
|
|
37
|
+
registerCampaignsCommands(program, client, resolveProfileId);
|
|
38
|
+
registerKeywordsCommands(program, client, resolveProfileId);
|
|
39
|
+
registerAdsCommands(program, client, resolveProfileId);
|
|
40
|
+
registerReportsCommands(program, client, resolveProfileId);
|
|
41
|
+
program.parse();
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAE5B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACzB,YAAY,EAAE,MAAM,CAAC,YAAY;IACjC,YAAY,EAAE,MAAM,CAAC,YAAY;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,IAA0B;IAClD,MAAM,SAAS,GACb,IAAI,CAAC,OAAO;QACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,MAAM,CAAC,gBAAgB,CAAC;IAE1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,UAAU,CACR,2GAA2G,CAC5G,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC1C,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC7D,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC5D,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACvD,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE3D,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function printTable(headers: string[], rows: (string | number)[][]): void;
|
|
2
|
+
export declare function printJson(data: unknown): void;
|
|
3
|
+
export declare function printSuccess(message: string): void;
|
|
4
|
+
export declare function printError(message: string): void;
|
|
5
|
+
export declare function printWarning(message: string): void;
|
|
6
|
+
export declare function colorState(state: string): string;
|
|
7
|
+
export declare function formatCurrency(amount: number | string | undefined): string;
|
|
8
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAW/E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWhD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAK1E"}
|
package/build/output.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import Table from "cli-table3";
|
|
3
|
+
export function printTable(headers, rows) {
|
|
4
|
+
const table = new Table({
|
|
5
|
+
head: headers.map((h) => chalk.cyan.bold(h)),
|
|
6
|
+
style: { head: [] },
|
|
7
|
+
});
|
|
8
|
+
for (const row of rows) {
|
|
9
|
+
table.push(row.map(String));
|
|
10
|
+
}
|
|
11
|
+
console.log(table.toString());
|
|
12
|
+
}
|
|
13
|
+
export function printJson(data) {
|
|
14
|
+
console.log(JSON.stringify(data, null, 2));
|
|
15
|
+
}
|
|
16
|
+
export function printSuccess(message) {
|
|
17
|
+
console.log(chalk.green(message));
|
|
18
|
+
}
|
|
19
|
+
export function printError(message) {
|
|
20
|
+
console.error(chalk.red(message));
|
|
21
|
+
}
|
|
22
|
+
export function printWarning(message) {
|
|
23
|
+
console.warn(chalk.yellow(message));
|
|
24
|
+
}
|
|
25
|
+
export function colorState(state) {
|
|
26
|
+
switch (state.toUpperCase()) {
|
|
27
|
+
case "ENABLED":
|
|
28
|
+
return chalk.green(state);
|
|
29
|
+
case "PAUSED":
|
|
30
|
+
return chalk.yellow(state);
|
|
31
|
+
case "ARCHIVED":
|
|
32
|
+
return chalk.gray(state);
|
|
33
|
+
default:
|
|
34
|
+
return state;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function formatCurrency(amount) {
|
|
38
|
+
if (amount === undefined || amount === null)
|
|
39
|
+
return "$0.00";
|
|
40
|
+
const num = typeof amount === "string" ? parseFloat(amount) : amount;
|
|
41
|
+
if (isNaN(num))
|
|
42
|
+
return "$0.00";
|
|
43
|
+
return `$${num.toFixed(2)}`;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,UAAU,UAAU,CAAC,OAAiB,EAAE,IAA2B;IACvE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;KACpB,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAmC;IAChE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAC5D,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/B,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "amazonads-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for Amazon Ads API",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "build/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"amazonads": "build/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"build"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"watch": "tsc --watch",
|
|
16
|
+
"start": "node build/index.js",
|
|
17
|
+
"test": "vitest run",
|
|
18
|
+
"test:watch": "vitest"
|
|
19
|
+
},
|
|
20
|
+
"author": "",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"chalk": "^5.4.1",
|
|
24
|
+
"cli-table3": "^0.6.5",
|
|
25
|
+
"commander": "^12.1.0",
|
|
26
|
+
"dotenv": "^16.4.7",
|
|
27
|
+
"open": "^10.2.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^22.19.13",
|
|
31
|
+
"typescript": "^5.7.2",
|
|
32
|
+
"vitest": "^4.0.18"
|
|
33
|
+
}
|
|
34
|
+
}
|