UNPKG

cmrd

Version:

A tiny utility for building command-line strings with clean and simple syntax.

43 lines (42 loc) 1.22 kB
// src/cmrd.ts function getMaxArgPlaceholder(expressions) { return Math.max(...expressions.filter((exp) => typeof exp === "number")); } function isNil(value) { return value == null; } function isCmdArgIndex(exp) { return typeof exp === "number"; } function isCmdIf(exp) { return Array.isArray(exp) && exp.length === 2 && isCmdArgIndex(exp[0]) && typeof exp[1] === "string"; } function cmrd(strings, ...exprs) { const highestArgKey = getMaxArgPlaceholder(exprs); return (...args) => { const getExprValue = (expr) => { if (isNil(expr)) return ""; if (isCmdArgIndex(expr)) return args[expr] || ""; if (isCmdIf(expr)) return args[expr[0]] == null ? "" : expr[1]; return expr; }; const parsedCmd = strings.reduce((acc, str, i) => { const arg = getExprValue(exprs[i])?.trim(); const part = `${str}${arg}`; if (acc.endsWith(" ") && part.startsWith(" ")) { return `${acc}${part.trimStart()}`; } return `${acc}${part}`; }, ""); const extraArgs = args.slice(highestArgKey + 1).join(" "); return `${parsedCmd} ${extraArgs}`.trim(); }; } var cmrd_default = cmrd; export { cmrd_default as default, cmrd };