tag-params
Version:
Transform a generic string into parameters suitable for template literals functions tags
2 lines (1 loc) • 560 B
JavaScript
self.tagParams=function(t){"use strict";const e=t=>t,n=Object.create(null),r=(t,n)=>{const r=n||e,s=[],a=[],{length:u}=t;let c=0;for(;c<=u;){let e=t.indexOf("${",c);if(-1<e){s.push(t.slice(c,e)),e=c=e+2;let n=1;for(;0<n&&c<u;){const e=t[c++];n+="{"===e?1:"}"===e?-1:0}a.push(r(t.slice(e,c-1)))}else s.push(t.slice(c)),c=u+1}return{template:s,values:a}},s=(t,e)=>{const{template:s,values:a}=r(t,e),u=[s],c=Function("return function(){with(arguments[0])return["+a+"]}")();return t=>u.concat(c(t||n))};return t.params=(t,e)=>s(t)(e),t.parse=r,t.partial=s,t}({});