UNPKG

ofi

Version:

Yet another arguments parser

2 lines (1 loc) 2.62 kB
var A=/(^"|"$)/g;function c(e){return e.codePointAt(0)===45}function F(e){return c(e)&&e.codePointAt(1)!==45}function L(e){return c(e)&&e.codePointAt(1)===45}function T(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function x(e){return e.replace(/-/g," ").replace(/^\w|[A-Z]|\b\w|\s+/g,(t,r)=>r===0?t.toLowerCase():t.toUpperCase()).replace(/\s+/g,"")}function h(e){return typeof e=="number"||typeof e=="string"?!isNaN(Number(e)):!1}var _={parseNumber:!0,shortFlagGroup:!0,camelize:!1,"populate--":!1};function g(e,t){return t.parseNumber&&h(e)?Number.parseFloat(e):typeof e=="string"?e.replace(A,""):e}function O(e,t){if(!F(e))return;e=e.slice(1);let r=Object.entries(t);for(let[o,u]of r)if(Array.isArray(u)&&u.includes(e)||typeof u=="string"&&u===e)return"--"+o}function j(e,t={}){var C,N,w,k;t={..._,...t};let r={_:[]},o=t.default||{},u=t.alias||{},b=t.coerce||{},d=t.camelize?x:i=>i,E=[...Object.keys(o),...Object.keys(b),...Object.values(t).flat().filter(i=>typeof i=="string")].map(x);typeof e=="string"&&(e=e.match(/"([^"]+)"|(\S+)/g)||e.split(/(\s+)/)),e=e.filter(Boolean),t["populate--"]&&(r["--"]=[]);let n=0,s;function m(){let i;if(/^"(.*)"$/.test(e[n])&&(i=!0),s.split("=")[1])return s.split("=")[1];if(e[n+1]&&(!c(e[n+1])||i))return n++,e[n].replace(A,"")}for(;n<e.length;n++){if(s=O(e[n].split("=")[0],u)||e[n].split("=")[0],e[n].split("=")[1]&&(s+="="+e[n].split("=")[1]),!c(e[n])){r._.push(g(e[n],t));continue}if(typeof t.unknown=="function"&&!O(s,u)&&!E.includes(s.replace(/-/g,""))&&t.unknown(e[n].split("=")[0]),L(s)){if(s==="--"){let y=e.slice(n+1).map(S=>g(S,t));r._.push(...y),t["populate--"]&&r["--"].push(...y);break}let[i,f]=s.slice(2).split("="),a=T(i),l=d(a),p=f||e[n+1];if((C=t.boolean)!=null&&C.includes(a.replace(/^no-/,"")))a.startsWith("no-")?r[d(a.replace(/^no-/,""))]=!1:r[l]=p&&!c(p)?m().toLowerCase()==="true":!0;else if((N=t.number)!=null&&N.includes(a)){if(!h(p))continue;r[l]=Number.parseFloat(m())}else if((w=t.string)!=null&&w.includes(a)){if(!m())continue;r[l]=String(p)}else if((k=t.array)!=null&&k.includes(a)){if(!p)continue;if(f){r[l]=f.split(",").map(y=>g(y,t));continue}for(;e[n+1]&&!c(e[n+1]);)Array.isArray(r[l])||(r[l]=[]),n++,r[l].push(g(e[n],t));r[l]=r[l]||o[a]||o[l]}else r[l]=g(m(),t)||o[a]||o[l]}else if(F(s)){if(s=s.split("=")[0],!t.shortFlagGroup){r[s.slice(1)]=!0;continue}s=s.replace(/[^\dA-Za-z\u00C0-\u1FFF\u2C00-\uD7FF]/g,"");for(let i=0;i<s.length;i++){let f=O("-"+s[i],u)||s[i];r[d(f.replace(/^-+/,""))]=!0}}}for(let i in b)r[i]!==void 0&&typeof b[i]=="function"&&(r[i]=b[i](r[i]));return Object.assign(o,r)}export{j as default,j as parse};