dnnsmnstrr
Version:
The Dennis Muensterer CLI
158 lines (154 loc) • 4.26 kB
JavaScript
#!/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));
})();