UNPKG

@sern/cli

Version:

Official CLI for @sern/handler

89 lines (87 loc) 3.26 kB
import { require } from '../chunk-S2QRDR2W.js'; import { getConfig } from '../chunk-PZE2TMOK.js'; import { fromCwd } from '../chunk-H6QGMA6W.js'; import { greenBright } from 'colorette'; import fs from 'fs'; import prompt from 'prompts'; import { fetch } from 'undici'; import esbuild from 'esbuild'; import { resolve } from 'path'; var link = `https://raw.githubusercontent.com/sern-handler/awesome-plugins/main/pluginlist.json`; async function fetchPluginData() { return fetch(link).then((res) => res.json()).then((data) => data).catch(() => []); } function pluginsQ(choices) { return [{ name: "list", type: "autocompleteMultiselect", message: "What plugins do you want to install?", choices: choices.map((e) => ({ title: e.name, value: e })), min: 1 }]; } async function plugins(args, opts) { const plugins2 = await fetchPluginData(); let selectedPlugins; if (args.length) { const normalizedArgs = args.map((str) => str.toLowerCase()); console.log("Trying to find plugins to install..."); const results = plugins2.reduce((acc, cur) => { if (normalizedArgs.includes(cur.name.toLowerCase())) { return [...acc, cur]; } return acc; }, []); selectedPlugins = results; } else { selectedPlugins = (await prompt(pluginsQ(plugins2))).list; } if (!selectedPlugins.length) { process.exit(1); } const { language } = await getConfig(); for await (const plgData of selectedPlugins) { const pluginText = await download(plgData.link); const dir = fromCwd("/src/plugins"); const linkNoExtension = `${process.cwd()}/src/plugins/${plgData.name}`; if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } if (language === "typescript") { fs.writeFileSync(linkNoExtension + ".ts", pluginText); } else { const { type = void 0 } = require(resolve("package.json")); const format = type === void 0 || type === "cjs" ? "cjs" : "esm"; const transformResult = await esbuild.transform(pluginText, { target: "node18", format, loader: "ts", banner: `/** Partial information: ${plgData.description} @author ${plgData.author} @example${plgData.example}*/` }); if (transformResult.warnings.length > 0) { console.log(transformResult.warnings.map((msg) => msg.text).join("\n")); } console.warn("transforming plugins with js strips comments"); console.warn("We provided some minimal information at top of file, or view the documentation for this plugin here:"); console.warn(plgData.link); fs.writeFileSync(linkNoExtension + ".js", transformResult.code); } } const pluginNames = selectedPlugins.map((data) => { return "Installed " + data.name + " from " + data.author.join(","); }); console.log(`Successfully downloaded plugin(s): ${greenBright(pluginNames.join("\n"))}`); } async function download(url) { const data = await fetch(url, { method: "GET" }).then((res) => res.text()).catch(() => null); if (!data) throw new Error("Download failed! Kindly contact developers"); return data; } export { fetchPluginData, plugins, pluginsQ }; //# sourceMappingURL=out.js.map //# sourceMappingURL=plugins.js.map