@mtndev/cli 1.1.0 → 2.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/CHANGELOG.md +91 -0
- package/cjs/__chunks/VH7oDXx4.cjs +28 -0
- package/cjs/commands/aws/ec2/allow-ip/handler.cjs +261 -0
- package/cjs/commands/aws/ec2/allow-ip/handler.d.ts +6 -0
- package/cjs/commands/aws/ec2/allow-ip/index.cjs +25 -0
- package/cjs/commands/aws/ec2/allow-ip/index.d.ts +3 -0
- package/cjs/commands/aws/ec2/allow-ip/schema.cjs +33 -0
- package/cjs/commands/aws/ec2/allow-ip/schema.d.ts +33 -0
- package/cjs/commands/aws/ec2/allow-ip/utils.cjs +379 -0
- package/cjs/commands/aws/ec2/allow-ip/utils.d.ts +189 -0
- package/cjs/commands/aws/iam/admin-group.cjs +111 -0
- package/cjs/commands/aws/iam/admin-group.d.ts +55 -0
- package/cjs/commands/aws/iam/break-glass/handler.cjs +127 -0
- package/cjs/commands/aws/iam/break-glass/handler.d.ts +7 -0
- package/cjs/commands/aws/iam/break-glass/index.cjs +7 -0
- package/cjs/commands/aws/iam/break-glass/index.d.ts +2 -0
- package/cjs/commands/aws/iam/break-glass/schema.cjs +21 -0
- package/cjs/commands/aws/iam/break-glass/schema.d.ts +25 -0
- package/cjs/commands/aws/iam/check-admin/handler.cjs +89 -0
- package/cjs/commands/aws/iam/check-admin/handler.d.ts +5 -0
- package/cjs/commands/aws/iam/check-admin/index.cjs +7 -0
- package/cjs/commands/aws/iam/check-admin/index.d.ts +2 -0
- package/cjs/commands/aws/iam/check-admin/schema.cjs +19 -0
- package/cjs/commands/aws/iam/check-admin/schema.d.ts +19 -0
- package/cjs/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
- package/cjs/commands/aws/iam/policies/sts-federation.json +11 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
- package/cjs/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
- package/cjs/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
- package/cjs/commands/aws/iam/policies/user-admins-write-list.json +117 -0
- package/cjs/commands/aws/iam/remove-admin/handler.cjs +120 -0
- package/cjs/commands/aws/iam/remove-admin/handler.d.ts +6 -0
- package/cjs/commands/aws/iam/remove-admin/index.cjs +7 -0
- package/cjs/commands/aws/iam/remove-admin/index.d.ts +2 -0
- package/cjs/commands/aws/iam/remove-admin/schema.cjs +22 -0
- package/cjs/commands/aws/iam/remove-admin/schema.d.ts +28 -0
- package/cjs/commands/aws/iam/setup-acl/handler.cjs +227 -0
- package/cjs/commands/aws/iam/setup-acl/handler.d.ts +6 -0
- package/cjs/commands/aws/iam/setup-acl/index.cjs +13 -0
- package/cjs/commands/aws/iam/setup-acl/index.d.ts +3 -0
- package/cjs/commands/aws/iam/setup-acl/schema.cjs +19 -0
- package/cjs/commands/aws/iam/setup-acl/schema.d.ts +24 -0
- package/cjs/commands/aws/iam/setup-acl/utils.cjs +305 -0
- package/cjs/commands/aws/iam/setup-acl/utils.d.ts +61 -0
- package/cjs/commands/aws/iam/users/handler.cjs +59 -0
- package/cjs/commands/aws/iam/users/handler.d.ts +5 -0
- package/cjs/commands/aws/iam/users/index.cjs +18 -0
- package/cjs/commands/aws/iam/users/index.d.ts +3 -0
- package/cjs/commands/aws/iam/users/schema.cjs +17 -0
- package/cjs/commands/aws/iam/users/schema.d.ts +18 -0
- package/cjs/commands/aws/iam/users/utils.cjs +454 -0
- package/cjs/commands/aws/iam/users/utils.d.ts +119 -0
- package/cjs/commands/aws/index.cjs +223 -0
- package/cjs/commands/aws/index.d.ts +14 -0
- package/cjs/commands/aws/route53/add-record/handler.cjs +264 -0
- package/cjs/commands/aws/route53/add-record/handler.d.ts +36 -0
- package/cjs/commands/aws/route53/add-record/index.cjs +26 -0
- package/cjs/commands/aws/route53/add-record/index.d.ts +3 -0
- package/cjs/commands/aws/route53/add-record/schema.cjs +43 -0
- package/cjs/commands/aws/route53/add-record/schema.d.ts +45 -0
- package/cjs/commands/aws/route53/add-record/utils.cjs +404 -0
- package/cjs/commands/aws/route53/add-record/utils.d.ts +216 -0
- package/cjs/commands/aws/route53/remove-record/handler.cjs +114 -0
- package/cjs/commands/aws/route53/remove-record/handler.d.ts +6 -0
- package/cjs/commands/aws/route53/remove-record/index.cjs +5 -0
- package/cjs/commands/aws/route53/remove-record/index.d.ts +2 -0
- package/cjs/commands/aws/route53/remove-record/schema.cjs +22 -0
- package/cjs/commands/aws/route53/remove-record/schema.d.ts +30 -0
- package/cjs/commands/aws/schema.cjs +19 -0
- package/cjs/commands/aws/schema.d.ts +13 -0
- package/cjs/commands/aws/ses/send-email/handler.cjs +73 -0
- package/cjs/commands/aws/ses/send-email/handler.d.ts +5 -0
- package/cjs/commands/aws/ses/send-email/index.cjs +9 -0
- package/cjs/commands/aws/ses/send-email/index.d.ts +3 -0
- package/cjs/commands/aws/ses/send-email/schema.cjs +24 -0
- package/cjs/commands/aws/ses/send-email/schema.d.ts +39 -0
- package/cjs/commands/aws/ses/send-email/utils.cjs +87 -0
- package/cjs/commands/aws/ses/send-email/utils.d.ts +47 -0
- package/cjs/commands/aws/ses/smtp-password.cjs +72 -0
- package/cjs/commands/aws/ses/smtp-password.d.ts +21 -0
- package/cjs/commands/aws/utils/exec-aws.cjs +145 -0
- package/cjs/commands/aws/utils/exec-aws.d.ts +79 -0
- package/cjs/commands/aws/utils/resolve-policy-path.cjs +15 -0
- package/cjs/commands/aws/utils/resolve-policy-path.d.ts +8 -0
- package/cjs/commands/aws/utils/resolve-profile.cjs +93 -0
- package/cjs/commands/aws/utils/resolve-profile.d.ts +28 -0
- package/cjs/commands/aws/utils/tty.cjs +54 -0
- package/cjs/commands/aws/utils/tty.d.ts +24 -0
- package/cjs/commands/db/create-readonly-user/handler.cjs +254 -0
- package/cjs/commands/db/create-readonly-user/handler.d.ts +5 -0
- package/cjs/commands/db/create-readonly-user/index.cjs +18 -0
- package/cjs/commands/db/create-readonly-user/index.d.ts +3 -0
- package/cjs/commands/db/create-readonly-user/mysql.cjs +102 -0
- package/cjs/commands/db/create-readonly-user/mysql.d.ts +33 -0
- package/cjs/commands/db/create-readonly-user/postgres.cjs +209 -0
- package/cjs/commands/db/create-readonly-user/postgres.d.ts +31 -0
- package/cjs/commands/db/create-readonly-user/schema.cjs +39 -0
- package/cjs/commands/db/create-readonly-user/schema.d.ts +55 -0
- package/cjs/commands/db/create-readonly-user/utils.cjs +160 -0
- package/cjs/commands/db/create-readonly-user/utils.d.ts +112 -0
- package/cjs/commands/db/index.cjs +46 -0
- package/cjs/commands/db/index.d.ts +6 -0
- package/cjs/commands/doppler/handler.cjs +95 -9
- package/cjs/commands/doppler/index.cjs +33 -41
- package/cjs/commands/doppler/index.d.ts +1 -0
- package/cjs/commands/doppler/schema.cjs +130 -6
- package/cjs/commands/doppler/schema.d.ts +233 -17
- package/cjs/commands/doppler/set-secret.cjs +378 -0
- package/cjs/commands/doppler/set-secret.d.ts +113 -0
- package/cjs/commands/doppler/utils/exec.cjs +106 -12
- package/cjs/commands/doppler/utils.cjs +412 -30
- package/cjs/commands/doppler/utils.d.ts +32 -8
- package/cjs/commands/icons/handler.cjs +82 -8
- package/cjs/commands/icons/index.cjs +15 -31
- package/cjs/commands/icons/schema.cjs +101 -13
- package/cjs/commands/icons/schema.d.ts +1 -1
- package/cjs/commands/icons/utils.cjs +131 -13
- package/cjs/commands/index.cjs +54 -82
- package/cjs/commands/schema.cjs +25 -8
- package/cjs/index.cjs +3 -4
- package/esm/commands/aws/ec2/allow-ip/handler.d.ts +6 -0
- package/esm/commands/aws/ec2/allow-ip/handler.js +258 -0
- package/esm/commands/aws/ec2/allow-ip/index.d.ts +3 -0
- package/esm/commands/aws/ec2/allow-ip/index.js +4 -0
- package/esm/commands/aws/ec2/allow-ip/schema.d.ts +33 -0
- package/esm/commands/aws/ec2/allow-ip/schema.js +29 -0
- package/esm/commands/aws/ec2/allow-ip/utils.d.ts +189 -0
- package/esm/commands/aws/ec2/allow-ip/utils.js +363 -0
- package/esm/commands/aws/iam/admin-group.d.ts +55 -0
- package/esm/commands/aws/iam/admin-group.js +104 -0
- package/esm/commands/aws/iam/break-glass/handler.d.ts +7 -0
- package/esm/commands/aws/iam/break-glass/handler.js +124 -0
- package/esm/commands/aws/iam/break-glass/index.d.ts +2 -0
- package/esm/commands/aws/iam/break-glass/index.js +4 -0
- package/esm/commands/aws/iam/break-glass/schema.d.ts +25 -0
- package/esm/commands/aws/iam/break-glass/schema.js +19 -0
- package/esm/commands/aws/iam/check-admin/handler.d.ts +5 -0
- package/esm/commands/aws/iam/check-admin/handler.js +86 -0
- package/esm/commands/aws/iam/check-admin/index.d.ts +2 -0
- package/esm/commands/aws/iam/check-admin/index.js +4 -0
- package/esm/commands/aws/iam/check-admin/schema.d.ts +19 -0
- package/esm/commands/aws/iam/check-admin/schema.js +17 -0
- package/esm/commands/aws/iam/policies/s3-restrictions-deny-non-s3-services.json +20 -0
- package/esm/commands/aws/iam/policies/sts-federation.json +11 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-list.json +175 -0
- package/esm/commands/aws/iam/policies/user-admins-deny-regions-list.json +41 -0
- package/esm/commands/aws/iam/policies/user-admins-self-service-iam.json +56 -0
- package/esm/commands/aws/iam/policies/user-admins-write-list.json +117 -0
- package/esm/commands/aws/iam/remove-admin/handler.d.ts +6 -0
- package/esm/commands/aws/iam/remove-admin/handler.js +117 -0
- package/esm/commands/aws/iam/remove-admin/index.d.ts +2 -0
- package/esm/commands/aws/iam/remove-admin/index.js +4 -0
- package/esm/commands/aws/iam/remove-admin/schema.d.ts +28 -0
- package/esm/commands/aws/iam/remove-admin/schema.js +20 -0
- package/esm/commands/aws/iam/setup-acl/handler.d.ts +6 -0
- package/esm/commands/aws/iam/setup-acl/handler.js +224 -0
- package/esm/commands/aws/iam/setup-acl/index.d.ts +3 -0
- package/esm/commands/aws/iam/setup-acl/index.js +4 -0
- package/esm/commands/aws/iam/setup-acl/schema.d.ts +24 -0
- package/esm/commands/aws/iam/setup-acl/schema.js +18 -0
- package/esm/commands/aws/iam/setup-acl/utils.d.ts +61 -0
- package/esm/commands/aws/iam/setup-acl/utils.js +298 -0
- package/esm/commands/aws/iam/users/handler.d.ts +5 -0
- package/esm/commands/aws/iam/users/handler.js +56 -0
- package/esm/commands/aws/iam/users/index.d.ts +3 -0
- package/esm/commands/aws/iam/users/index.js +4 -0
- package/esm/commands/aws/iam/users/schema.d.ts +18 -0
- package/esm/commands/aws/iam/users/schema.js +16 -0
- package/esm/commands/aws/iam/users/utils.d.ts +119 -0
- package/esm/commands/aws/iam/users/utils.js +440 -0
- package/esm/commands/aws/index.d.ts +14 -0
- package/esm/commands/aws/index.js +142 -0
- package/esm/commands/aws/route53/add-record/handler.d.ts +36 -0
- package/esm/commands/aws/route53/add-record/handler.js +258 -0
- package/esm/commands/aws/route53/add-record/index.d.ts +3 -0
- package/esm/commands/aws/route53/add-record/index.js +4 -0
- package/esm/commands/aws/route53/add-record/schema.d.ts +45 -0
- package/esm/commands/aws/route53/add-record/schema.js +40 -0
- package/esm/commands/aws/route53/add-record/utils.d.ts +216 -0
- package/esm/commands/aws/route53/add-record/utils.js +389 -0
- package/esm/commands/aws/route53/remove-record/handler.d.ts +6 -0
- package/esm/commands/aws/route53/remove-record/handler.js +111 -0
- package/esm/commands/aws/route53/remove-record/index.d.ts +2 -0
- package/esm/commands/aws/route53/remove-record/index.js +3 -0
- package/esm/commands/aws/route53/remove-record/schema.d.ts +30 -0
- package/esm/commands/aws/route53/remove-record/schema.js +21 -0
- package/esm/commands/aws/schema.d.ts +13 -0
- package/esm/commands/aws/schema.js +16 -0
- package/esm/commands/aws/ses/send-email/handler.d.ts +5 -0
- package/esm/commands/aws/ses/send-email/handler.js +70 -0
- package/esm/commands/aws/ses/send-email/index.d.ts +3 -0
- package/esm/commands/aws/ses/send-email/index.js +4 -0
- package/esm/commands/aws/ses/send-email/schema.d.ts +39 -0
- package/esm/commands/aws/ses/send-email/schema.js +23 -0
- package/esm/commands/aws/ses/send-email/utils.d.ts +47 -0
- package/esm/commands/aws/ses/send-email/utils.js +84 -0
- package/esm/commands/aws/ses/smtp-password.d.ts +21 -0
- package/esm/commands/aws/ses/smtp-password.js +69 -0
- package/esm/commands/aws/utils/exec-aws.d.ts +79 -0
- package/esm/commands/aws/utils/exec-aws.js +137 -0
- package/esm/commands/aws/utils/resolve-policy-path.d.ts +8 -0
- package/esm/commands/aws/utils/resolve-policy-path.js +14 -0
- package/esm/commands/aws/utils/resolve-profile.d.ts +28 -0
- package/esm/commands/aws/utils/resolve-profile.js +88 -0
- package/esm/commands/aws/utils/tty.d.ts +24 -0
- package/esm/commands/aws/utils/tty.js +51 -0
- package/esm/commands/db/create-readonly-user/handler.d.ts +5 -0
- package/esm/commands/db/create-readonly-user/handler.js +251 -0
- package/esm/commands/db/create-readonly-user/index.d.ts +3 -0
- package/esm/commands/db/create-readonly-user/index.js +4 -0
- package/esm/commands/db/create-readonly-user/mysql.d.ts +33 -0
- package/esm/commands/db/create-readonly-user/mysql.js +98 -0
- package/esm/commands/db/create-readonly-user/postgres.d.ts +31 -0
- package/esm/commands/db/create-readonly-user/postgres.js +205 -0
- package/esm/commands/db/create-readonly-user/schema.d.ts +55 -0
- package/esm/commands/db/create-readonly-user/schema.js +35 -0
- package/esm/commands/db/create-readonly-user/utils.d.ts +112 -0
- package/esm/commands/db/create-readonly-user/utils.js +151 -0
- package/esm/commands/db/index.d.ts +6 -0
- package/esm/commands/db/index.js +31 -0
- package/esm/commands/doppler/handler.js +92 -9
- package/esm/commands/doppler/index.d.ts +1 -0
- package/esm/commands/doppler/index.js +6 -41
- package/esm/commands/doppler/schema.d.ts +233 -17
- package/esm/commands/doppler/schema.js +125 -7
- package/esm/commands/doppler/set-secret.d.ts +113 -0
- package/esm/commands/doppler/set-secret.js +370 -0
- package/esm/commands/doppler/utils/exec.js +100 -12
- package/esm/commands/doppler/utils.d.ts +32 -8
- package/esm/commands/doppler/utils.js +396 -30
- package/esm/commands/icons/handler.js +79 -8
- package/esm/commands/icons/index.js +4 -31
- package/esm/commands/icons/schema.d.ts +1 -1
- package/esm/commands/icons/schema.js +97 -15
- package/esm/commands/icons/utils.js +125 -13
- package/esm/commands/index.js +49 -78
- package/esm/commands/schema.js +22 -7
- package/esm/index.js +3 -4
- package/package.json +12 -2
- package/vitest.config.ts +11 -0
- package/cjs/__chunks/4GFJUCSP.cjs +0 -52
- package/cjs/__chunks/4SFWHCB3.cjs +0 -133
- package/cjs/__chunks/B2KFW7T7.cjs +0 -1
- package/cjs/__chunks/EMMC33QA.cjs +0 -401
- package/cjs/__chunks/INFOPAHN.cjs +0 -117
- package/cjs/__chunks/J36P6UNE.cjs +0 -75
- package/cjs/__chunks/NIMXXHJQ.cjs +0 -92
- package/cjs/__chunks/NSRFG4DF.cjs +0 -100
- package/cjs/__chunks/WNJ3ZYLI.cjs +0 -1
- package/cjs/__chunks/ZMDIOZPT.cjs +0 -22
- package/esm/__chunks/46HGXFME.js +0 -0
- package/esm/__chunks/6G4PXXKF.js +0 -75
- package/esm/__chunks/6L5RNR7G.js +0 -100
- package/esm/__chunks/FL7AILGH.js +0 -133
- package/esm/__chunks/HJSXC6HP.js +0 -117
- package/esm/__chunks/O262GK4B.js +0 -401
- package/esm/__chunks/O3CCA76Q.js +0 -22
- package/esm/__chunks/SJXQJ7RS.js +0 -92
- package/esm/__chunks/SNCKIAOR.js +0 -0
- package/esm/__chunks/X3R5PSWH.js +0 -52
|
@@ -1,13 +1,125 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { CHANNEL_TEXT_MAP, ICON_SIZE_MAP } from "./schema.js";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { existsSync } from "fs";
|
|
5
|
+
import { join, resolve } from "path";
|
|
6
|
+
//#region src/commands/icons/utils.js
|
|
7
|
+
/**
|
|
8
|
+
* Check if ImageMagick is installed
|
|
9
|
+
* @param {boolean} verbose - Show verbose output
|
|
10
|
+
* @throws {Error} If ImageMagick is not installed
|
|
11
|
+
*/
|
|
12
|
+
function checkDependencies(verbose = false) {
|
|
13
|
+
if (verbose) console.log(chalk.blue("\n🔍 Checking dependencies..."));
|
|
14
|
+
try {
|
|
15
|
+
execSync("which magick", { stdio: "pipe" });
|
|
16
|
+
if (verbose) console.log(chalk.green(" ✓ ImageMagick is installed"));
|
|
17
|
+
} catch {
|
|
18
|
+
throw new Error("ImageMagick is not installed. Please install it (brew install imagemagick) and try again.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validate that required base icons exist
|
|
23
|
+
* @param {string} baseDir - Base directory containing icons
|
|
24
|
+
* @param {string[]} iconTypes - Icon types to validate
|
|
25
|
+
* @param {boolean} verbose - Show verbose output
|
|
26
|
+
* @throws {Error} If required icons are missing
|
|
27
|
+
*/
|
|
28
|
+
function validateBaseIcons(baseDir, iconTypes, verbose = false) {
|
|
29
|
+
if (verbose) console.log(chalk.blue("\n📁 Validating base icons..."));
|
|
30
|
+
const resolvedDir = resolve(baseDir);
|
|
31
|
+
if (!existsSync(resolvedDir)) throw new Error(`Input directory does not exist: ${resolvedDir}`);
|
|
32
|
+
const missingIcons = [];
|
|
33
|
+
for (const iconType of iconTypes) {
|
|
34
|
+
const iconPath = join(resolvedDir, `${iconType}.png`);
|
|
35
|
+
if (!existsSync(iconPath)) missingIcons.push(`${iconType}.png`);
|
|
36
|
+
else if (verbose) console.log(chalk.green(` ✓ Found: ${iconType}.png`));
|
|
37
|
+
}
|
|
38
|
+
if (missingIcons.length > 0) throw new Error(`Missing base icons in ${resolvedDir}: ${missingIcons.join(", ")}`);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Generate a single icon with channel overlay
|
|
42
|
+
* @param {{
|
|
43
|
+
* baseDir: string;
|
|
44
|
+
* channel: string;
|
|
45
|
+
* iconType: string;
|
|
46
|
+
* verbose: boolean;
|
|
47
|
+
* }} options - Generation options
|
|
48
|
+
* @returns {string} Path to generated icon
|
|
49
|
+
*/
|
|
50
|
+
function generateIcon(options) {
|
|
51
|
+
const { baseDir, channel, iconType, verbose } = options;
|
|
52
|
+
const resolvedDir = resolve(baseDir);
|
|
53
|
+
const inputFile = join(resolvedDir, `${iconType}.png`);
|
|
54
|
+
const outputFile = join(resolvedDir, `${iconType}-${channel}.png`);
|
|
55
|
+
const size = ICON_SIZE_MAP[iconType] || 378;
|
|
56
|
+
const text = CHANNEL_TEXT_MAP[channel] || channel.toUpperCase().slice(0, 3);
|
|
57
|
+
const command = [
|
|
58
|
+
"magick",
|
|
59
|
+
`"${inputFile}"`,
|
|
60
|
+
`-pointsize ${size}`,
|
|
61
|
+
"-fill white",
|
|
62
|
+
"-gravity center",
|
|
63
|
+
"-font Arial-Black",
|
|
64
|
+
"-stroke black",
|
|
65
|
+
"-strokewidth 5",
|
|
66
|
+
`-draw "rotate -45 text 0,0 '${text}'"`,
|
|
67
|
+
`"${outputFile}"`
|
|
68
|
+
].join(" ");
|
|
69
|
+
if (verbose) console.log(chalk.gray(` Command: ${command}`));
|
|
70
|
+
try {
|
|
71
|
+
execSync(command, { stdio: verbose ? "inherit" : "pipe" });
|
|
72
|
+
return outputFile;
|
|
73
|
+
} catch (error) {
|
|
74
|
+
throw new Error(`Failed to generate ${iconType}-${channel}.png: ${error instanceof Error ? error.message : String(error)}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate all icons for specified channels and types
|
|
79
|
+
* @param {{
|
|
80
|
+
* baseDir: string;
|
|
81
|
+
* channels: string[];
|
|
82
|
+
* iconTypes: string[];
|
|
83
|
+
* verbose: boolean;
|
|
84
|
+
* }} options - Generation options
|
|
85
|
+
* @returns {{ success: string[]; failed: { icon: string; error: string }[] }}
|
|
86
|
+
*/
|
|
87
|
+
function generateAllIcons(options) {
|
|
88
|
+
const { baseDir, channels, iconTypes, verbose } = options;
|
|
89
|
+
/** @type {string[]} */
|
|
90
|
+
const success = [];
|
|
91
|
+
/** @type {{ icon: string; error: string }[]} */
|
|
92
|
+
const failed = [];
|
|
93
|
+
const totalIcons = channels.length * iconTypes.length;
|
|
94
|
+
let current = 0;
|
|
95
|
+
if (verbose) console.log(chalk.blue(`\n🎨 Generating ${totalIcons} icon(s)...`));
|
|
96
|
+
for (const channel of channels) for (const iconType of iconTypes) {
|
|
97
|
+
current++;
|
|
98
|
+
const iconName = `${iconType}-${channel}.png`;
|
|
99
|
+
if (verbose) console.log(chalk.blue(`\n[${current}/${totalIcons}] Generating ${iconName}...`));
|
|
100
|
+
try {
|
|
101
|
+
const outputPath = generateIcon({
|
|
102
|
+
baseDir,
|
|
103
|
+
channel,
|
|
104
|
+
iconType,
|
|
105
|
+
verbose
|
|
106
|
+
});
|
|
107
|
+
success.push(outputPath);
|
|
108
|
+
console.log(chalk.green(` ✓ Generated: ${iconName}`));
|
|
109
|
+
} catch (error) {
|
|
110
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
111
|
+
failed.push({
|
|
112
|
+
icon: iconName,
|
|
113
|
+
error: errorMessage
|
|
114
|
+
});
|
|
115
|
+
console.log(chalk.red(` ✗ Failed: ${iconName}`));
|
|
116
|
+
if (verbose) console.log(chalk.red(` ${errorMessage}`));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
success,
|
|
121
|
+
failed
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
export { checkDependencies, generateAllIcons, generateIcon, validateBaseIcons };
|
package/esm/commands/index.js
CHANGED
|
@@ -1,89 +1,60 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import "
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
} from "
|
|
9
|
-
import "
|
|
10
|
-
import {
|
|
11
|
-
iconsCommandMetadata
|
|
12
|
-
} from "../__chunks/6G4PXXKF.js";
|
|
13
|
-
import "../__chunks/46HGXFME.js";
|
|
14
|
-
import {
|
|
15
|
-
dopplerCommand
|
|
16
|
-
} from "../__chunks/6L5RNR7G.js";
|
|
17
|
-
import "../__chunks/O262GK4B.js";
|
|
18
|
-
import "../__chunks/SJXQJ7RS.js";
|
|
19
|
-
import {
|
|
20
|
-
dopplerCommandMetadata
|
|
21
|
-
} from "../__chunks/X3R5PSWH.js";
|
|
22
|
-
|
|
23
|
-
// src/commands/index.js
|
|
2
|
+
import { iconsCommandMetadata } from "./icons/schema.js";
|
|
3
|
+
import { iconsCommand } from "./icons/handler.js";
|
|
4
|
+
import "./icons/index.js";
|
|
5
|
+
import { dopplerCommandMetadata } from "./doppler/schema.js";
|
|
6
|
+
import { dopplerCommand } from "./doppler/handler.js";
|
|
7
|
+
import "./doppler/index.js";
|
|
8
|
+
import { registerDbCommands } from "./db/index.js";
|
|
9
|
+
import { registerAwsCommands } from "./aws/index.js";
|
|
10
|
+
import { globalCommandsMetadata } from "./schema.js";
|
|
24
11
|
import chalk from "chalk";
|
|
25
12
|
import { program } from "commander";
|
|
13
|
+
//#region src/commands/index.js
|
|
26
14
|
function displayWelcomeMessage() {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
`));
|
|
15
|
+
console.log(chalk.bold.blue("\n🚀 @mtndev/cli"));
|
|
16
|
+
console.log(chalk.gray(` ${globalCommandsMetadata.description}\n`));
|
|
30
17
|
}
|
|
31
18
|
displayWelcomeMessage();
|
|
32
|
-
program.name(globalCommandsMetadata.name).description(globalCommandsMetadata.description).version(globalCommandsMetadata.version).option(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
19
|
+
program.name(globalCommandsMetadata.name).description(globalCommandsMetadata.description).version(globalCommandsMetadata.version).option(`-${globalCommandsMetadata.options.verbose.alias}, --verbose`, globalCommandsMetadata.options.verbose.description, globalCommandsMetadata.options.verbose.default).configureHelp({ subcommandDescription: (cmd) => {
|
|
20
|
+
return (cmd.summary() || cmd.description().split("\n")[0] || "") + "\n";
|
|
21
|
+
} });
|
|
22
|
+
program.command("doppler [action]").summary("Manage Doppler configurations").description(dopplerCommandMetadata.description).option(`-${dopplerCommandMetadata.options.environments.alias}, --environments <envs>`, dopplerCommandMetadata.options.environments.description).option(`--from <project>`, dopplerCommandMetadata.options.from.description).option(`--to <project>`, dopplerCommandMetadata.options.to.description).option(`-${dopplerCommandMetadata.options.force.alias}, --force`, dopplerCommandMetadata.options.force.description, dopplerCommandMetadata.options.force.default).option(`-${dopplerCommandMetadata.options.project.alias}, --project <project>`, dopplerCommandMetadata.options.project.description).option(`--environment <env>`, dopplerCommandMetadata.options.environment.description).option(`-${dopplerCommandMetadata.options.config.alias}, --config <config>`, dopplerCommandMetadata.options.config.description).option(`--name <name>`, dopplerCommandMetadata.options.name.description).option(`--value <value>`, dopplerCommandMetadata.options.value.description).option(`-${dopplerCommandMetadata.options.yes.alias}, --yes`, dopplerCommandMetadata.options.yes.description, dopplerCommandMetadata.options.yes.default).option(`-${dopplerCommandMetadata.options.help.alias}, --help`, dopplerCommandMetadata.options.help.description, dopplerCommandMetadata.options.help.default).action(async (action, options, cmd) => {
|
|
23
|
+
const globalOptions = cmd.parent?.opts() || {};
|
|
24
|
+
await dopplerCommand({
|
|
25
|
+
action,
|
|
26
|
+
environments: options.environments,
|
|
27
|
+
from: options.from,
|
|
28
|
+
to: options.to,
|
|
29
|
+
force: options.force,
|
|
30
|
+
project: options.project,
|
|
31
|
+
environment: options.environment,
|
|
32
|
+
config: options.config,
|
|
33
|
+
name: options.name,
|
|
34
|
+
value: options.value,
|
|
35
|
+
yes: options.yes,
|
|
36
|
+
verbose: globalOptions.verbose,
|
|
37
|
+
help: options.help
|
|
38
|
+
});
|
|
41
39
|
});
|
|
42
|
-
program.command("
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
action,
|
|
54
|
-
environment: options.environment,
|
|
55
|
-
verbose: globalOptions.verbose,
|
|
56
|
-
help: options.help
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
program.command("icons <input>").summary("Generate app channel version icons with overlay text").description(iconsCommandMetadata.description).option(
|
|
60
|
-
`-${iconsCommandMetadata.options.channels.alias}, --channels <channels>`,
|
|
61
|
-
iconsCommandMetadata.options.channels.description,
|
|
62
|
-
iconsCommandMetadata.options.channels.default
|
|
63
|
-
).option(
|
|
64
|
-
`-${iconsCommandMetadata.options.iconTypes.alias}, --icon-types <types>`,
|
|
65
|
-
iconsCommandMetadata.options.iconTypes.description,
|
|
66
|
-
iconsCommandMetadata.options.iconTypes.default
|
|
67
|
-
).option(
|
|
68
|
-
`-${iconsCommandMetadata.options.help.alias}, --help`,
|
|
69
|
-
iconsCommandMetadata.options.help.description,
|
|
70
|
-
iconsCommandMetadata.options.help.default
|
|
71
|
-
).action(async (input, options, cmd) => {
|
|
72
|
-
const globalOptions = cmd.parent?.opts() || {};
|
|
73
|
-
const channels = typeof options.channels === "string" ? options.channels.split(",").map((c) => c.trim()) : options.channels;
|
|
74
|
-
const iconTypes = typeof options.iconTypes === "string" ? options.iconTypes.split(",").map((t) => t.trim()) : options.iconTypes;
|
|
75
|
-
await iconsCommand({
|
|
76
|
-
input,
|
|
77
|
-
channels,
|
|
78
|
-
iconTypes,
|
|
79
|
-
verbose: globalOptions.verbose,
|
|
80
|
-
help: options.help
|
|
81
|
-
});
|
|
40
|
+
program.command("icons <input>").summary("Generate app channel version icons with overlay text").description(iconsCommandMetadata.description).option(`-${iconsCommandMetadata.options.channels.alias}, --channels <channels>`, iconsCommandMetadata.options.channels.description, iconsCommandMetadata.options.channels.default).option(`-${iconsCommandMetadata.options.iconTypes.alias}, --icon-types <types>`, iconsCommandMetadata.options.iconTypes.description, iconsCommandMetadata.options.iconTypes.default).option(`-${iconsCommandMetadata.options.help.alias}, --help`, iconsCommandMetadata.options.help.description, iconsCommandMetadata.options.help.default).action(async (input, options, cmd) => {
|
|
41
|
+
const globalOptions = cmd.parent?.opts() || {};
|
|
42
|
+
const channels = typeof options.channels === "string" ? options.channels.split(",").map((c) => c.trim()) : options.channels;
|
|
43
|
+
const iconTypes = typeof options.iconTypes === "string" ? options.iconTypes.split(",").map((t) => t.trim()) : options.iconTypes;
|
|
44
|
+
await iconsCommand({
|
|
45
|
+
input,
|
|
46
|
+
channels,
|
|
47
|
+
iconTypes,
|
|
48
|
+
verbose: globalOptions.verbose,
|
|
49
|
+
help: options.help
|
|
50
|
+
});
|
|
82
51
|
});
|
|
52
|
+
registerAwsCommands(program);
|
|
53
|
+
registerDbCommands(program);
|
|
83
54
|
program.on("command:*", () => {
|
|
84
|
-
|
|
55
|
+
program.help();
|
|
85
56
|
});
|
|
86
|
-
if (process.argv.length <= 2)
|
|
87
|
-
program.help();
|
|
88
|
-
}
|
|
57
|
+
if (process.argv.length <= 2) program.help();
|
|
89
58
|
program.parse();
|
|
59
|
+
//#endregion
|
|
60
|
+
export {};
|
package/esm/commands/schema.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/commands/schema.js
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for global command options
|
|
5
|
+
* These options are available across all commands
|
|
6
|
+
*/
|
|
7
|
+
const globalOptionsSchema = z.object({ verbose: z.boolean().default(false).optional().describe("Enable verbose logging for detailed output and error traces") });
|
|
8
|
+
/**
|
|
9
|
+
* Global CLI metadata
|
|
10
|
+
* Defines the CLI contract and available global options
|
|
11
|
+
*/
|
|
12
|
+
const globalCommandsMetadata = {
|
|
13
|
+
name: "mtndev-cli",
|
|
14
|
+
version: "1.0.0",
|
|
15
|
+
description: "Omnibus CLI tool for mtndev projects",
|
|
16
|
+
options: { verbose: {
|
|
17
|
+
description: globalOptionsSchema.shape.verbose.description,
|
|
18
|
+
default: false,
|
|
19
|
+
alias: "v"
|
|
20
|
+
} }
|
|
8
21
|
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { globalCommandsMetadata, globalOptionsSchema };
|
package/esm/index.js
CHANGED
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "@mtndev/cli",
|
|
4
4
|
"description": "A CLI tool for mtndev projects",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "2.0.1",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
@@ -24,12 +24,17 @@
|
|
|
24
24
|
"module": "./esm/index.js",
|
|
25
25
|
"types": "./esm/index.d.ts",
|
|
26
26
|
"dependencies": {
|
|
27
|
+
"@aws-sdk/client-ses": "^3.1075.0",
|
|
28
|
+
"@aws-sdk/credential-providers": "^3.1075.0",
|
|
27
29
|
"chalk": "^4.1.2",
|
|
28
30
|
"chokidar": "^3.5.3",
|
|
29
31
|
"commander": "^12.0.0",
|
|
30
32
|
"cross-spawn": "^7.0.3",
|
|
31
33
|
"fs-extra": "^11.2.0",
|
|
32
34
|
"glob": "^11.1.0",
|
|
35
|
+
"mysql2": "^3.23.0",
|
|
36
|
+
"nodemailer": "^9.0.1",
|
|
37
|
+
"pg": "^8.22.0",
|
|
33
38
|
"rimraf": "^5.0.5",
|
|
34
39
|
"zod": "^3.22.4"
|
|
35
40
|
},
|
|
@@ -38,7 +43,10 @@
|
|
|
38
43
|
"@types/cross-spawn": "^6.0.6",
|
|
39
44
|
"@types/fs-extra": "^11.0.4",
|
|
40
45
|
"@types/node": "^20.11.0",
|
|
41
|
-
"
|
|
46
|
+
"@types/nodemailer": "^8.0.1",
|
|
47
|
+
"@types/pg": "^8.20.0",
|
|
48
|
+
"typescript": "^5.9.3",
|
|
49
|
+
"vitest": "^4.1.10"
|
|
42
50
|
},
|
|
43
51
|
"exports": {
|
|
44
52
|
".": {
|
|
@@ -57,6 +65,8 @@
|
|
|
57
65
|
"lint": "eslint \"src/**/*.{ts,tsx,js,jsx}\"",
|
|
58
66
|
"lint:fix": "eslint \"src/**/*.{ts,tsx,js,jsx}\" --fix",
|
|
59
67
|
"publish:staging": "libsync publish:staging --force",
|
|
68
|
+
"test": "vitest run",
|
|
69
|
+
"test:watch": "vitest",
|
|
60
70
|
"typecheck": "libsync build --types-only"
|
|
61
71
|
}
|
|
62
72
|
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
// The CLI runs on Node; no DOM needed.
|
|
6
|
+
environment: "node",
|
|
7
|
+
// Tests are colocated in src/ so they get typechecking, linting, and
|
|
8
|
+
// formatting. libsync excludes *.test.* from both export and build paths.
|
|
9
|
+
include: ["src/**/*.test.js"],
|
|
10
|
+
},
|
|
11
|
+
});
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/commands/doppler/schema.js
|
|
2
|
-
var _zod = require('zod');
|
|
3
|
-
var dopplerCommandOptionsSchema = _zod.z.object({
|
|
4
|
-
action: _zod.z.enum(["download", "upload"], {
|
|
5
|
-
errorMap: () => ({
|
|
6
|
-
message: "Action must be either 'download' or 'upload'"
|
|
7
|
-
})
|
|
8
|
-
}).optional().describe("Action to perform: download or upload configurations"),
|
|
9
|
-
environment: _zod.z.string().optional().default("dev").describe(
|
|
10
|
-
'Environment configuration to process (e.g., dev, stg, prd, or "all" for all configs)'
|
|
11
|
-
),
|
|
12
|
-
verbose: _zod.z.boolean().optional().default(false).describe("Enable verbose logging for detailed error information"),
|
|
13
|
-
help: _zod.z.boolean().optional().default(false).describe("Display help for command")
|
|
14
|
-
});
|
|
15
|
-
var dopplerCommandMetadata = {
|
|
16
|
-
name: "doppler",
|
|
17
|
-
description: `Manage Doppler configurations
|
|
18
|
-
|
|
19
|
-
Subcommands:
|
|
20
|
-
download Download configurations from Doppler to local .env files
|
|
21
|
-
upload Upload local .env files to Doppler (with confirmation prompt)
|
|
22
|
-
|
|
23
|
-
Examples:
|
|
24
|
-
$ @mtndev/cli doppler download # Download dev config to .env.dev
|
|
25
|
-
$ @mtndev/cli doppler download -e all # Download all configs
|
|
26
|
-
$ @mtndev/cli doppler download -e stg # Download staging config
|
|
27
|
-
$ @mtndev/cli doppler upload # Upload .env.dev to Doppler
|
|
28
|
-
$ @mtndev/cli doppler upload -e prd # Upload production config`,
|
|
29
|
-
options: {
|
|
30
|
-
environment: {
|
|
31
|
-
description: dopplerCommandOptionsSchema.shape.environment.description,
|
|
32
|
-
default: "dev",
|
|
33
|
-
alias: "e"
|
|
34
|
-
},
|
|
35
|
-
// Global options are included here for help display
|
|
36
|
-
verbose: {
|
|
37
|
-
description: dopplerCommandOptionsSchema.shape.verbose.description,
|
|
38
|
-
default: false,
|
|
39
|
-
alias: "v"
|
|
40
|
-
},
|
|
41
|
-
help: {
|
|
42
|
-
description: dopplerCommandOptionsSchema.shape.help.description,
|
|
43
|
-
default: false,
|
|
44
|
-
alias: "h"
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
exports.dopplerCommandOptionsSchema = dopplerCommandOptionsSchema; exports.dopplerCommandMetadata = dopplerCommandMetadata;
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var _J36P6UNEcjs = require('./J36P6UNE.cjs');
|
|
5
|
-
|
|
6
|
-
// src/commands/icons/utils.js
|
|
7
|
-
var _child_process = require('child_process');
|
|
8
|
-
var _fs = require('fs');
|
|
9
|
-
var _path = require('path');
|
|
10
|
-
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
11
|
-
function checkDependencies(verbose = false) {
|
|
12
|
-
if (verbose) {
|
|
13
|
-
console.log(_chalk2.default.blue("\n\u{1F50D} Checking dependencies..."));
|
|
14
|
-
}
|
|
15
|
-
try {
|
|
16
|
-
_child_process.execSync.call(void 0, "which magick", { stdio: "pipe" });
|
|
17
|
-
if (verbose) {
|
|
18
|
-
console.log(_chalk2.default.green(" \u2713 ImageMagick is installed"));
|
|
19
|
-
}
|
|
20
|
-
} catch (e) {
|
|
21
|
-
throw new Error(
|
|
22
|
-
"ImageMagick is not installed. Please install it (brew install imagemagick) and try again."
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function validateBaseIcons(baseDir, iconTypes, verbose = false) {
|
|
27
|
-
if (verbose) {
|
|
28
|
-
console.log(_chalk2.default.blue("\n\u{1F4C1} Validating base icons..."));
|
|
29
|
-
}
|
|
30
|
-
const resolvedDir = _path.resolve.call(void 0, baseDir);
|
|
31
|
-
if (!_fs.existsSync.call(void 0, resolvedDir)) {
|
|
32
|
-
throw new Error(`Input directory does not exist: ${resolvedDir}`);
|
|
33
|
-
}
|
|
34
|
-
const missingIcons = [];
|
|
35
|
-
for (const iconType of iconTypes) {
|
|
36
|
-
const iconPath = _path.join.call(void 0, resolvedDir, `${iconType}.png`);
|
|
37
|
-
if (!_fs.existsSync.call(void 0, iconPath)) {
|
|
38
|
-
missingIcons.push(`${iconType}.png`);
|
|
39
|
-
} else if (verbose) {
|
|
40
|
-
console.log(_chalk2.default.green(` \u2713 Found: ${iconType}.png`));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (missingIcons.length > 0) {
|
|
44
|
-
throw new Error(
|
|
45
|
-
`Missing base icons in ${resolvedDir}: ${missingIcons.join(", ")}`
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function generateIcon(options) {
|
|
50
|
-
const { baseDir, channel, iconType, verbose } = options;
|
|
51
|
-
const resolvedDir = _path.resolve.call(void 0, baseDir);
|
|
52
|
-
const inputFile = _path.join.call(void 0, resolvedDir, `${iconType}.png`);
|
|
53
|
-
const outputFile = _path.join.call(void 0, resolvedDir, `${iconType}-${channel}.png`);
|
|
54
|
-
const size = _J36P6UNEcjs.ICON_SIZE_MAP[
|
|
55
|
-
/** @type {keyof typeof ICON_SIZE_MAP} */
|
|
56
|
-
iconType
|
|
57
|
-
] || 378;
|
|
58
|
-
const text = _J36P6UNEcjs.CHANNEL_TEXT_MAP[
|
|
59
|
-
/** @type {keyof typeof CHANNEL_TEXT_MAP} */
|
|
60
|
-
channel
|
|
61
|
-
] || channel.toUpperCase().slice(0, 3);
|
|
62
|
-
const command = [
|
|
63
|
-
"magick",
|
|
64
|
-
`"${inputFile}"`,
|
|
65
|
-
`-pointsize ${size}`,
|
|
66
|
-
"-fill white",
|
|
67
|
-
"-gravity center",
|
|
68
|
-
"-font Arial-Black",
|
|
69
|
-
"-stroke black",
|
|
70
|
-
"-strokewidth 5",
|
|
71
|
-
`-draw "rotate -45 text 0,0 '${text}'"`,
|
|
72
|
-
`"${outputFile}"`
|
|
73
|
-
].join(" ");
|
|
74
|
-
if (verbose) {
|
|
75
|
-
console.log(_chalk2.default.gray(` Command: ${command}`));
|
|
76
|
-
}
|
|
77
|
-
try {
|
|
78
|
-
_child_process.execSync.call(void 0, command, { stdio: verbose ? "inherit" : "pipe" });
|
|
79
|
-
return outputFile;
|
|
80
|
-
} catch (error) {
|
|
81
|
-
throw new Error(
|
|
82
|
-
`Failed to generate ${iconType}-${channel}.png: ${error instanceof Error ? error.message : String(error)}`
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
function generateAllIcons(options) {
|
|
87
|
-
const { baseDir, channels, iconTypes, verbose } = options;
|
|
88
|
-
const success = [];
|
|
89
|
-
const failed = [];
|
|
90
|
-
const totalIcons = channels.length * iconTypes.length;
|
|
91
|
-
let current = 0;
|
|
92
|
-
if (verbose) {
|
|
93
|
-
console.log(_chalk2.default.blue(`
|
|
94
|
-
\u{1F3A8} Generating ${totalIcons} icon(s)...`));
|
|
95
|
-
}
|
|
96
|
-
for (const channel of channels) {
|
|
97
|
-
for (const iconType of iconTypes) {
|
|
98
|
-
current++;
|
|
99
|
-
const iconName = `${iconType}-${channel}.png`;
|
|
100
|
-
if (verbose) {
|
|
101
|
-
console.log(
|
|
102
|
-
_chalk2.default.blue(`
|
|
103
|
-
[${current}/${totalIcons}] Generating ${iconName}...`)
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
try {
|
|
107
|
-
const outputPath = generateIcon({
|
|
108
|
-
baseDir,
|
|
109
|
-
channel,
|
|
110
|
-
iconType,
|
|
111
|
-
verbose
|
|
112
|
-
});
|
|
113
|
-
success.push(outputPath);
|
|
114
|
-
console.log(_chalk2.default.green(` \u2713 Generated: ${iconName}`));
|
|
115
|
-
} catch (error) {
|
|
116
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
117
|
-
failed.push({ icon: iconName, error: errorMessage });
|
|
118
|
-
console.log(_chalk2.default.red(` \u2717 Failed: ${iconName}`));
|
|
119
|
-
if (verbose) {
|
|
120
|
-
console.log(_chalk2.default.red(` ${errorMessage}`));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return { success, failed };
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
exports.checkDependencies = checkDependencies; exports.validateBaseIcons = validateBaseIcons; exports.generateIcon = generateIcon; exports.generateAllIcons = generateAllIcons;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|