@shba007/unstack
Version:
Print your favorite framework info into cli
129 lines (121 loc) • 4.6 kB
JavaScript
const prompts = require('@inquirer/prompts');
const citty = require('citty');
const consola = require('consola');
const chalk = require('chalk');
const stringWidth = require('string-width');
const wrapAnsi = require('wrap-ansi');
const index = require('./index.cjs');
require('ofetch');
require('date-fns');
require('@shba007/unascii');
require('ora');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
const chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
const stringWidth__default = /*#__PURE__*/_interopDefaultCompat(stringWidth);
const wrapAnsi__default = /*#__PURE__*/_interopDefaultCompat(wrapAnsi);
const name = "@shba007/unstack";
const version = "1.0.1";
const description = "Print your favorite framework info into cli";
var FrameworkName = /* @__PURE__ */ ((FrameworkName2) => {
FrameworkName2["Angular"] = "angular";
FrameworkName2["React"] = "react";
FrameworkName2["Vue.js"] = "vue";
FrameworkName2["Svelte"] = "svelte";
FrameworkName2["Preact"] = "preact";
FrameworkName2["Solid.js"] = "solid";
FrameworkName2["Remix"] = "remix";
FrameworkName2["Qwik"] = "qwik";
FrameworkName2["Lit"] = "lit";
FrameworkName2["Tini"] = "tinijs";
FrameworkName2["Alpine.js"] = "alpine";
FrameworkName2["Stencil"] = "stencil";
FrameworkName2["Mithril"] = "mithril";
FrameworkName2["Astro"] = "astro";
FrameworkName2["Vuepress"] = "vuepress";
FrameworkName2["Vitepress"] = "vitepress";
FrameworkName2["Docus"] = "docus";
FrameworkName2["Express"] = "express";
FrameworkName2["Fastify"] = "fastify";
FrameworkName2["Koa"] = "koa";
FrameworkName2["Feathers"] = "feathers";
FrameworkName2["NestJS"] = "nestjs";
FrameworkName2["Nitro"] = "nitro";
FrameworkName2["Analog"] = "analog";
FrameworkName2["Next.js"] = "next";
FrameworkName2["Gatsby"] = "gatsby";
FrameworkName2["Nuxt"] = "nuxt";
FrameworkName2["Gridsome"] = "gridsome";
FrameworkName2["Svelte Kit"] = "svelte-kit";
FrameworkName2["Ember"] = "ember";
FrameworkName2["Fresh"] = "fresh";
FrameworkName2["Redwood"] = "redwood";
FrameworkName2["Meteor"] = "meteor";
FrameworkName2["Hydrogen"] = "hydrogen";
return FrameworkName2;
})(FrameworkName || {});
function camelToSentence(key) {
const withSpaces = key.replace(/([A-Z])/g, " $1");
return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1);
}
const main = citty.defineCommand({
meta: {
name,
description,
version
},
args: {
framework: {
type: "string",
description: "Name of the Framework"
}
},
async run({ args }) {
const framework = args.framework ?? await prompts.select({
message: "Select framework",
choices: Object.entries(FrameworkName).map(([name2, value]) => ({
name: chalk__default.hex(index.getColor(value))(name2),
value
}))
});
const validFrameworks = Object.values(FrameworkName);
if (!validFrameworks.includes(framework)) {
consola.consola.error(`Invalid framework: ${framework}`);
process.exit(1);
}
const artLines = (await index.getImage(framework)).split("\n");
const artWidth = Math.max(...artLines.map((line) => stringWidth__default(line)));
const rawMeta = Object.entries(await index.getDetails(framework)).map(([k, v]) => {
const label = camelToSentence(k);
const colored = chalk__default.hex(index.getColor(framework))(label);
const valueText = typeof v === "string" ? v : JSON.stringify(v, void 0, 2);
return {
text: `${colored}: ${valueText}`,
indent: stringWidth__default(label) + 2
};
});
const gutter = " ";
const termWidth = process.stdout.columns || 80;
const metaWidth = termWidth - artWidth - gutter.length;
const metaLines = [
...Array.from({ length: 4 }).fill(""),
...rawMeta.flatMap(({ text, indent }) => {
const wrapped = wrapAnsi__default(text, metaWidth, { hard: true }).split("\n");
return wrapped.map((line, i) => i === 0 ? line : " ".repeat(indent) + line);
})
];
const total = Math.max(artLines.length, metaLines.length);
const out = [];
for (let i = 0; i < total; i++) {
const line = artLines[i] || "";
const padCount = artWidth - stringWidth__default(line);
const left = line + " ".repeat(padCount);
const right = metaLines[i] || "";
out.push(`${left} ${right}`);
}
consola.consola.log(out.join("\n"));
}
});
const runMain = () => citty.runMain(main);
exports.main = main;
exports.runMain = runMain;
;