UNPKG

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
'use strict'; 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;