UNPKG

dnnsmnstrr

Version:
158 lines (154 loc) 4.26 kB
#!/usr/bin/env node var __getOwnPropNames = Object.getOwnPropertyNames; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; // package.json var package_default; var init_package = __esm({ "package.json"() { package_default = { name: "dnnsmnstrr", version: "1.1.3", description: "The Dennis Muensterer CLI", license: "MIT", type: "module", repository: "dnnsmnstrr/dnnsmnstrr", author: { name: "Dennis Muensterer", email: "dennismuensterer@gmail.com", url: "https://muensterer.tech" }, bin: { dnnsmnstrr: "dist/cli.mjs" }, engines: { node: ">=18" }, scripts: { start: "tsx source/cli.js", build: "esbuild source/cli.js --bundle --format=esm --platform=node --outfile=dist/cli.mjs --banner:js='#!/usr/bin/env node' --external:react --external:ink --external:ink-select-input --external:meow --external:open", prepare: "npm run build" }, files: [ "dist" ], keywords: [ "cli-app", "cli", "dnnsmnstrr", "card", "business-card", "sindresorhus", "unicorns" ], dependencies: { ink: "^6.2.0", "ink-select-input": "^6.2.0", meow: "^13.2.0", open: "^10.2.0", react: "^19.1.1" }, devDependencies: { esbuild: "^0.25.9", "eslint-config-xo-react": "^0.28.0", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", tsx: "^4.20.4", xo: "^0.60.0" } }; } }); // source/ui.jsx var ui_exports = {}; import React, { useState } from "react"; import { Box, Text, useInput, useApp, useStdout, render } from "ink"; import SelectInput from "ink-select-input"; import open from "open"; var author, CURRENT_DOMAIN, EMAIL, DEBUG, createItems, items, Ui; var init_ui = __esm({ "source/ui.jsx"() { init_package(); ({ author } = package_default); CURRENT_DOMAIN = author.url; EMAIL = author.email; DEBUG = true; createItems = (items2) => { for (const item of items2) { item.key = item.url || item.label; } return items2; }; items = createItems([ { id: "website", label: "Website", url: CURRENT_DOMAIN }, { id: "twitter", label: "X / Twitter", url: "https://x.com/dnnsmnstrr" }, { id: "github", label: "GitHub", url: "https://github.com/dnnsmnstrr" }, { id: "contact", label: "Contact", url: "mailto:" + EMAIL }, { label: "---------" }, { id: "quit", label: "Quit" } ]); Ui = () => { const { write } = useStdout(); const log = (message) => DEBUG ? write(message) : null; const { exit } = useApp(); const [index, setIndex] = useState(0); const handleSelect = (item) => { if (item.url) { open(item.url); return; } if (item.id === "quit") { exit(); } }; useInput((input) => { if (input === "q") { exit(); } else { const itemIndex = items.findIndex( ({ id, label }) => (id || label)[0] === input ); if (itemIndex >= 0) { setIndex(itemIndex); } } }); const updateIndex = (_, nextIndex) => setIndex(nextIndex); return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Box, { borderStyle: "round", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, "Hi, I'm Dennis Muensterer. I like making things.")), /* @__PURE__ */ React.createElement(SelectInput, { items, index, onSelect: handleSelect, onHighlight: updateIndex })); }; render(/* @__PURE__ */ React.createElement(Ui, null)); } }); // source/cli.js import meow from "meow"; meow(` Usage $ dnnsmnstrr `, { importMeta: import.meta }); (async () => { await Promise.resolve().then(() => (init_ui(), ui_exports)); })();