UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

72 lines (71 loc) 1.28 kB
//#region src/utils/shell-argv.ts const DOUBLE_QUOTE_ESCAPES = new Set([ "\\", "\"", "$", "`", "\n", "\r" ]); function isDoubleQuoteEscape(next) { return Boolean(next && DOUBLE_QUOTE_ESCAPES.has(next)); } function splitShellArgs(raw) { const tokens = []; let buf = ""; let inSingle = false; let inDouble = false; let escaped = false; const pushToken = () => { if (buf.length > 0) { tokens.push(buf); buf = ""; } }; for (let i = 0; i < raw.length; i += 1) { const ch = raw[i]; if (escaped) { buf += ch; escaped = false; continue; } if (!inSingle && !inDouble && ch === "\\") { escaped = true; continue; } if (inSingle) { if (ch === "'") inSingle = false; else buf += ch; continue; } if (inDouble) { const next = raw[i + 1]; if (ch === "\\" && isDoubleQuoteEscape(next)) { buf += next; i += 1; continue; } if (ch === "\"") inDouble = false; else buf += ch; continue; } if (ch === "'") { inSingle = true; continue; } if (ch === "\"") { inDouble = true; continue; } if (/\s/.test(ch)) { pushToken(); continue; } buf += ch; } if (escaped || inSingle || inDouble) return null; pushToken(); return tokens; } //#endregion export { splitShellArgs as t };