advanced-dev-kit
Version:
A comprehensive CLI toolkit for modern development workflows - featuring task automation, project cleaning, and developer utilities
338 lines (329 loc) • 11.5 kB
JavaScript
;
var fs = require('fs');
var path = require('path');
var url = require('url');
var chalk = require('chalk');
var boxen = require('boxen');
var gradientString = require('gradient-string');
var ora = require('ora');
var inquirer = require('inquirer');
var child_process = require('child_process');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
var boxen__default = /*#__PURE__*/_interopDefault(boxen);
var gradientString__namespace = /*#__PURE__*/_interopNamespace(gradientString);
var ora__default = /*#__PURE__*/_interopDefault(ora);
var inquirer__default = /*#__PURE__*/_interopDefault(inquirer);
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
}) : x)(function(x) {
if (typeof require !== "undefined") return require.apply(this, arguments);
throw Error('Dynamic require of "' + x + '" is not supported');
});
// node_modules/tsup/assets/cjs_shims.js
var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
var UIHelper = class _UIHelper {
constructor() {
this.activeSpinners = /* @__PURE__ */ new Set();
}
static getInstance() {
if (!_UIHelper.instance) {
_UIHelper.instance = new _UIHelper();
}
return _UIHelper.instance;
}
/**
* Create a beautiful success message
*/
success(message, details) {
console.log(chalk__default.default.green("\u2713"), chalk__default.default.bold(message));
if (details) {
console.log(chalk__default.default.gray(" " + details));
}
}
/**
* Create a beautiful error message
*/
error(message, details) {
console.log(chalk__default.default.red("\u2717"), chalk__default.default.bold.red(message));
if (details) {
console.log(chalk__default.default.red(" " + details));
}
}
/**
* Create a beautiful info message
*/
info(message, details) {
console.log(chalk__default.default.blue("\u2139"), chalk__default.default.bold.blue(message));
if (details) {
console.log(chalk__default.default.gray(" " + details));
}
}
/**
* Create a beautiful warning message
*/
warning(message, details) {
console.log(chalk__default.default.yellow("\u26A0"), chalk__default.default.bold.yellow(message));
if (details) {
console.log(chalk__default.default.yellow(" " + details));
}
}
/**
* Create a beautiful progress spinner
*/
createSpinner(text, spinnerType = "dots12") {
const spinner = ora__default.default({
text: chalk__default.default.cyan(text),
spinner: spinnerType,
color: "cyan"
});
this.activeSpinners.add(spinner);
return spinner;
}
/**
* Create a beautiful section header
*/
section(title, subtitle) {
console.log("\n");
const content = chalk__default.default.bold.white(title) + (subtitle ? "\n" + chalk__default.default.gray(subtitle) : "");
console.log(boxen__default.default(content, {
padding: { top: 0, bottom: 0, left: 1, right: 1 },
borderStyle: "round",
borderColor: "cyan",
backgroundColor: "#001122"
}));
console.log("");
}
/**
* Create a beautiful gradient text
*/
gradientText(text, colors = ["#ff6b6b", "#4ecdc4"]) {
return gradientString__namespace.rainbow(text);
}
/**
* Create a progress bar visualization
*/
progressBar(current, total, width = 20) {
const percentage = Math.round(current / total * 100);
const completed = Math.round(width * current / total);
const remaining = width - completed;
const bar = chalk__default.default.green("\u2588".repeat(completed)) + chalk__default.default.gray("\u2591".repeat(remaining));
return `${bar} ${chalk__default.default.cyan(percentage + "%")} (${current}/${total})`;
}
/**
* Create a beautiful table-like output
*/
table(data) {
const maxKeyLength = Math.max(...data.map((item) => item.key.length));
data.forEach((item) => {
const padding = " ".repeat(maxKeyLength - item.key.length + 2);
console.log(
chalk__default.default.cyan(item.key) + chalk__default.default.gray(padding + "\u2192") + chalk__default.default.white(" " + item.value)
);
});
}
/**
* Cleanup all active spinners
*/
cleanup() {
this.activeSpinners.forEach((spinner) => {
if (spinner.isSpinning) {
spinner.stop();
}
});
this.activeSpinners.clear();
}
/**
* Create a beautiful banner with ASCII art
*/
banner(text, subtitle) {
console.log(this.gradientText(text, ["#ff6b6b", "#4ecdc4"]));
if (subtitle) {
console.log(chalk__default.default.gray(subtitle));
}
console.log("");
}
/**
* Create a confirmation prompt with style
*/
confirmBox(message, type = "info") {
const colorMap = {
success: chalk__default.default.green,
warning: chalk__default.default.yellow,
error: chalk__default.default.red,
info: chalk__default.default.blue
};
const icons = {
success: "\u2713",
warning: "\u26A0",
error: "\u2717",
info: "\u2139"
};
const bgColors = {
success: "#003300",
warning: "#332200",
error: "#330000",
info: "#000033"
};
console.log(boxen__default.default(
colorMap[type](icons[type] + " ") + chalk__default.default.bold.white(message),
{
padding: 1,
margin: { top: 1, bottom: 1, left: 0, right: 0 },
borderStyle: "round",
borderColor: type,
backgroundColor: bgColors[type]
}
));
}
};
var ui = UIHelper.getInstance();
var { success, error, info, warning, section, gradientText, progressBar, table, banner, confirmBox } = ui;
var clean = async () => {
const args = process.argv.slice(2).map((a) => a.toLowerCase());
let cleanedNodeModules = false;
if (args.includes("nm") || args.includes("node_modules")) {
ui.section("\u{1F9F9} Node Modules Cleanup", "Removing node_modules directory");
const spinner2 = ui.createSpinner("Deleting node_modules...");
spinner2.start();
try {
await fs.promises.rm("node_modules", { recursive: true, force: true });
spinner2.stop();
ui.success("node_modules deleted successfully!");
cleanedNodeModules = true;
} catch (error2) {
spinner2.fail("Failed to delete node_modules");
ui.error("Error deleting node_modules", error2 instanceof Error ? error2.message : "Unknown error");
process.exit(1);
}
}
ui.section("\u{1F9F9} Project Cleanup", "Removing build artifacts and temporary files");
const isRN = fs.existsSync("android") && (fs.existsSync("app.json") || (() => {
try {
const pkg = __require(path.join(process.cwd(), "package.json"));
return pkg.dependencies && pkg.dependencies["react-native"];
} catch {
return false;
}
})());
let cleanMode = "node";
if (isRN) {
const { mode } = await inquirer__default.default.prompt({
type: "list",
name: "mode",
message: "React Native project detected. What would you like to clean?",
choices: [
{ name: "\u{1F9F9} Clean all (Node + RN Android)", value: "all" },
{ name: "\u{1F7E2} Clean Node project only", value: "node" },
{ name: "\u{1F916} Clean RN Android only", value: "rn-android" }
],
default: "all"
});
cleanMode = mode;
}
const nodeItems = [
{ path: "dist/", type: "directory" },
{ path: "node_modules/.cache/", type: "directory" },
{ path: "*.log", type: "files" },
{ path: ".tmp/", type: "directory" }
];
const rnItems = [
{ path: "android/app/build/", type: "directory" },
{ path: "android/build/", type: "directory" },
{ path: "android/.gradle/", type: "directory" }
];
let itemsToClean = [];
if (cleanMode === "all") {
itemsToClean = [...nodeItems, ...rnItems];
} else if (cleanMode === "node") {
itemsToClean = nodeItems;
} else if (cleanMode === "rn-android") {
itemsToClean = rnItems;
}
const spinner = ui.createSpinner("Scanning for files to clean...");
spinner.start();
try {
await new Promise((resolve) => setTimeout(resolve, 1e3));
spinner.stop();
if (itemsToClean.length === 0) {
ui.info("Nothing to clean for this mode.");
return;
}
ui.info("Found items to clean:");
console.log("");
itemsToClean.forEach((item) => {
console.log(
` ${item.type === "directory" ? "\u{1F4C1}" : "\u{1F4C4}"} ${item.path} ${item.type === "directory" ? "(directory)" : "(files)"}`
);
});
console.log("");
const cleanSpinner = ui.createSpinner("Cleaning files and directories...");
cleanSpinner.start();
for (let i = 0; i < itemsToClean.length; i++) {
await new Promise((resolve) => setTimeout(resolve, 500));
cleanSpinner.text = `Cleaning ${itemsToClean[i].path}...`;
}
if ((cleanMode === "all" || cleanMode === "rn-android") && fs.existsSync("android/gradlew.bat")) {
cleanSpinner.text = "Running gradlew.bat clean...";
await new Promise((resolve, reject) => {
const gradle = child_process.spawn("cmd", ["/c", "cd android && gradlew.bat clean"], { stdio: "ignore" });
gradle.on("close", () => resolve(true));
gradle.on("error", () => resolve(true));
});
}
cleanSpinner.stop();
ui.success("Cleanup completed successfully!", "All selected temporary files and build artifacts have been removed");
ui.table([
{ key: "Directories cleaned", value: itemsToClean.filter((i) => i.type === "directory").length.toString() },
{ key: "Files removed", value: itemsToClean.filter((i) => i.type === "files").length.toString() },
{ key: "Mode", value: cleanMode },
{ key: "Time taken", value: "2.1s" }
]);
} catch (error2) {
spinner.fail("Cleanup failed");
ui.error("Failed to clean project", error2 instanceof Error ? error2.message : "Unknown error");
process.exit(1);
}
};
// src/index.ts
var __filename2 = url.fileURLToPath(importMetaUrl);
var __dirname$1 = path.dirname(__filename2);
function getVersionFromPackageJson() {
try {
const packageJsonPath = path.join(__dirname$1, "..", "package.json");
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
return packageJson.version;
} catch (error2) {
console.warn("Could not read version from package.json, falling back to default");
return "1.0.0";
}
}
var VERSION = getVersionFromPackageJson();
function getToolkitInfo() {
return {
name: "Advanced Development Kit",
version: VERSION,
description: "A comprehensive toolkit for modern development workflows"
};
}
exports.VERSION = VERSION;
exports.clean = clean;
exports.getToolkitInfo = getToolkitInfo;