escaya-codegen
Version:
lightweight and blazing fast JavaScript code generator from an EScaya-compliant AST
2 lines (1 loc) • 14.5 kB
JavaScript
function e(e,n,t){let r="[";const a=e.elements.length;if(a>0)for(let i=0;i<a;i++)r+=l(e.elements[i],n,t),i!==a-1&&"Elison"!==e.elements[i].type&&(r+=","+n.space);return r+="]",r}function n(e){return e.name}function t(e,n,t){return l(e.left,n,t)+n.space+"="+n.space+l(e.right,n,t)}function r(e,n,t){let r="{";const{directives:a,leafs:i}=e;if((i.length||a.length)>0){r+=n.lineEnd;const{length:e}=a;if(e>0){const u=o(n.indent,n.currentIndent++);let c=e-1;for(let i=0;i<e;)i===c&&(t|=8),r+=u+n.indent+l(a[i],n,t),++i<e&&(r+=";"+n.lineEnd);n.currentIndent--,r+=u+(8&t&&0===i.length?"":";")+n.lineEnd}i.length>0&&(r+=function(e,n,t){const r=o(n.indent,n.currentIndent++);let a="";if(e.length>0){let i=e.length-1;for(let u=0;u<e.length;u++)u===i&&(t|=8),a+=r+n.indent+l(e[u],n,t)+n.lineEnd;a+=r}return n.currentIndent--,a}(i,n,8^(8|t)))}return r+="}",r}const a=[(e,n,t,r)=>105===r?function(e,n,t){return f(e.value,t)}(e,0,t):function(e,n,t){return(e.static?"static ":"")+l(e.method,n,t)}(e,n,t),(n,t,r)=>{switch(n.type.charCodeAt(3)){case 97:return e(n,t,r);case 108:return function(e){return JSON.stringify(e.value)}(n);case 73:return function(e,n,t){return"for"+n.space+"("+l(e.initializer,n,t|(null!==e.initializer.isConst||"ForBinding"===e.initializer.type?1:0))+" in "+l(e.expression,n,t)+") "+l(e.statement,n,t)}(n,t,r);case 79:return function(e,n,t){return"for"+(e.await?" await":"")+n.space+"("+l(e.initializer,n,t|(null!==e.initializer.isConst||"ForBinding"===e.initializer.type?1:0))+" of "+l(e.expression,n,t)+") "+l(e.statement,n,t)}(n,t,r);case 111:return function(e,n,t){let r=null!==e.defaultBinding?e.defaultBinding.name:"";return null!==e.nameSpaceImport?r+(e.defaultBinding?", ":"")+"*"+n.space+"as "+e.nameSpaceImport.name:null!==e.namedImports?r+(e.defaultBinding?", ":"")+l(e.namedImports,n,t):r}(n,t,r);default:return function(e,n,t){return e.operator.length>2?e.operator+" "+l(e.operand,n,t):e.operator+("!+-~".includes(e.operator)&&"++"!==e.operand.operator&&"+"!==e.operand.operator&&"-"!==e.operand.operator&&"--"!==e.operand.operator?"":n.space)+l(e.operand,n,t)}(n,t,r)}},(e,n,r)=>{switch(e.type.charCodeAt(0)){case 66:return function(e,n,t){return c(e.leafs,n,8^(8|t))}(e,n,r);case 67:return function(e,n,t){let r="";const a=e.expressions.length;for(let i=0;i<a;)r+=l(e.expressions[i],n,t),++i<a&&(r+=","+n.space);return r}(e,n,r);case 79:return function(e,n,t){return l(e.member,n,t)+"?."+l(e.chain,n,t)}(e,n,r);case 73:return function(e){return null===e.name?e.binding.name:e.name.name+" as "+e.binding.name}(e);default:return t(e,n,r)}},(e,n,t)=>{switch(e.type.charCodeAt(2)){case 97:return function(e,n,t){return"class"+(e.name?" "+l(e.name,n,t)+n.space:n.space)+(e.heritage?"extends "+l(e.heritage,n,t):"")+c(e.elements,n,8^(8|t))}(e,n,t);case 112:return";";default:return function(e,n,t){return"for"+n.space+"("+(e.variableDeclarationList?"var "+s(e.initializer,n,1|t):null!==e.initializer?l(e.initializer,n,t|(null!==e.isConst?1:0)):"")+";"+(e.incrementor?l(e.incrementor,n,t):"")+";"+(e.condition?l(e.condition,n,t):"")+") "+l(e.statement,n,t)}(e,n,t)}},(n,t,r)=>{switch(n.type.charCodeAt(2)){case 103:return function(e){return e.value+"n"}(n);case 101:return function(e,n,t){return e.operator+l(e.operand,n,t)}(n,t,r);case 114:return e(n,t,r);default:return function(e,n,t){return"with ("+l(e.expression,n,t)+")"+n.space+l(e.statement,n,t)}(n,t,r)}},(e,n,t,r)=>111===r?function(e,n,t){return"var "+s(e.declarations,n,t)}(e,n,t):function(e,n,t){return"..."+l(e.argument,n,t)}(e,n,t),(e,n,t)=>{switch(e.type.charCodeAt(4)){case 116:return function(e,n,t){return(e.async?"async ":"")+"function"+(e.generator?"*"+n.space:"")+(e.name?" "+l(e.name,n,t):"")+"("+s(e.params,n,t)+")"+n.space+l(e.contents,n,t)}(e,n,t);case 69:return"this";case 119:return function(e,n,t){return"throw "+l(e.expression,n,t)+u(t)}(e,n,t);case 101:return function(e,n,t){return"while"+n.space+"("+l(e.expression,n,t)+")"+n.space+l(e.statement,n,t)}(e,n,t);case 103:return function(e,n,t){return"..."+l(e.argument,n,t)}(e,n,t);default:return function(e,n,t){const r=e.argument;return"yield"+(e.delegate?n.space+"*":"")+(r?("NumericLiteral"===r.type||"IdentifierReference"===r.type||"FloatingPointLiteral"===r.type?" ":n.space)+l(r,n,t):"")}(e,n,t)}},(e,n,r)=>{switch(e.type.charCodeAt(6)){case 77:return"import.meta";case 67:return function(e,n,t){return"import("+l(e.import,n,t)+")"}(e,n,r);case 109:return function(e,n,t){return l(e.left,n,t)+n.space+e.operator+n.space+l(e.right,n,t)}(e,n,r);case 103:return t(e,n,r);default:return function(e,n,t){return(e.async?"async ":"")+"function"+(e.generator?"*":"")+(e.name?" "+l(e.name,n,t):n.space)+"("+s(e.params,n,t)+")"+n.space+l(e.contents,n,t)}(e,n,r)}},(e,n,t,r)=>{switch(r){case 97:return function(e,n,t){return(null!==e.chain?l(e.chain,n,t):"")+"("+s(e.arguments,n,t)+")"}(e,n,t);case 120:return function(e){return null===e.moduleExportName&&null===e.namedBinding?"*":"* as "+e.namedBinding.name}(e);default:return function(e,n,t){return"new "+l(e.expression,n,t)+(16&t||!e.arguments?s(e.arguments,n,t):"("+s(e.arguments,n,t)+")")}(e,n,t)}},(e,n,t,r)=>function(e,n,t){return null!==e.declaration?"export "+l(e.declaration,n,t):null!==e.exportFromClause?"export "+l(e.exportFromClause,n,t)+" from "+f(e.fromClause.value,t)+u(t):"export {"+s(e.namedExports,n,t)+"}"+(null!==e.fromClause?" from "+f(e.fromClause.value,t):"")}(e,n,t),(e,t,r)=>{switch(e.type.charCodeAt(8)){case 117:return function(e,n,t){return"catch"+n.space+(e.binding?"("+l(e.binding,n,t)+")"+n.space:"")+l(e.block,n,8^(8|t))}(e,t,r);case 97:return function(e,n,t){return"return"+(e.expression?n.space+l(e.expression,n,1024|t):"")+u(t)}(e,t,r);case 101:return n(e);case 76:return function(e){return"`"+e.value+"`"}(e);case 69:return function(e,n,t){return e.value+(e.expression?"${"+l(e.expression,n,t)+"}":"")}(e,t,r);default:return","}},(e,n,t,r)=>101===r?function(e,n,t){return l(e.binding,n,t)+(e.initializer?n.space+"="+n.space+l(e.initializer,n,t):"")}(e,n,t):function(e,n,t){return l(e.expression,n,t)+u(t)}(e,n,t),e=>78===e.type.charCodeAt(0)?"new.target":";",(e,n,t,r)=>97===r?function(e,n,t){return"{"+s(e.importsList,n,t)+"}"}(e,n,t):function(e,n,t){return"if"+n.space+"("+l(e.expression,n,t)+")"+n.space+(e.alternate?l(e.consequent,n,8^(8|t))+n.space+"else "+l(e.alternate,n,t):l(e.consequent,n,t))}(e,n,t),(e,t,r,a)=>101===a?function(e,n,t){return(null!==e.chain?l(e.chain,n,t):"")+(e.computed?"["+l(e.property,n,t)+"]":(null!==e.chain&&"OptionalChain"===e.chain.type?".":"")+l(e.property,n,t))}(e,t,r):n(e),(e,n,t)=>{switch(e.type.charCodeAt(2)){case 103:return function(e,n,t){return l(e.member,n,t)+l(e.literal,n,t)}(e,n,t);case 108:return function(e,n,t){return l(e.expression,n,t)+"("+s(e.arguments,n,t)+")"}(e,n,t);default:return function(e,n,t){const r=o(n.indent,n.currentIndent++);let a="{";const i=e.properties.length,u=r+n.indent,c=","+n.lineEnd;if(i>0){a+=n.lineEnd;for(let r=0;r<i;r+1)a+=u+l(e.properties[r],n,t),++r<i&&(a+=c);a+=n.lineEnd+r}return a+="}",n.currentIndent--,a}(e,n,t)}},(e,n,t)=>114===e.type.charCodeAt(2)?function(e,n,t){return"var "+s(e.declarations,n,1^(1|t))+(1&t||8&t?"":";")}(e,n,t):function(e,n,t){return l(e.label,n,t)+":"+n.space+l(e.labelledItem,n,t)}(e,n,t),()=>{},(e,n,t)=>function(e,n,t){return l(e.binding,n,t)+(e.initializer?n.space+"="+n.space+l(e.initializer,n,t):"")}(e,n,t),()=>{},(e,n,t)=>function(e,n,t){return"debugger"+u(t)}(0,0,t),(e,n,t)=>{switch(e.type.charCodeAt(2)){case 109:return function(e,n,t){const r=l(e.member,n,t);return r+(e.computed?"["+l(e.expression,n,t)+"]":("FloatingPointLiteral"===e.member.type&&r.indexOf(".")<0?".":"")+"."+e.expression.name)}(e,n,t);case 106:return function(e,n,t){let r="{";const a=e.properties.length;if(a>0)for(let i=0;i<a;)r+=l(e.properties[i],n,t),++i<a&&(r+=","+n.space);return r+="}",r}(e,n,t);case 112:return function(e,n,t){return"export default "+l(e.declaration,n,t)+u(t)}(e,n,t);default:return function(e,n,t){return(e.getter?"get ":"")+(e.setter?"set ":"")+(e.async?"async ":"")+(e.generator?"*":"")+(e.name.expression?"["+l(e.name.expression,n,t)+"]":l(e.name,n,t))+"("+(e.getter?"":e.setter?l(e.propertySetParameterList,n,t):s(e.uniqueFormalParameters,n,t))+")"+n.space+l(e.contents,n,t)}(e,n,t)}},(e,n,t,r)=>98===r?function(e,n,t){let r="{";const a=e.properties.length;if(a>0)for(let i=0;i<a;)r+=l(e.properties[i],n,t),++i<a&&(r+=","+n.space);return r+="}",r}(e,n,t):function(e,n,t){return"("+l(e.expression,n,t)+")"}(e,n,t),(e,t,r)=>{switch(e.type.charCodeAt(2)){case 109:return function(e,n,t){let r="`";for(let a=0;a<e.elements.length;a++)r+=l(e.elements[a],n,t);return r+="`",r}(e,t,r);case 120:return function(e,n,t){return(e.isConst?"const":"let")+" "+s(e.declarations,n,1^(1|t))+(1&t||8&t?"":";")}(e,t,r);case 112:return function(e){return null===e.binding?e.name.name:e.name.name+" as "+e.binding.name}(e);default:return n(e)}},(e,t,r)=>{switch(e.type.charCodeAt(2)){case 110:return n(e);case 97:return function(e,n,t){return(128&t&&1024&t?" ":"")+"await "+l(e.expression,n,1024^(1024|t))}(e,t,r);case 115:return function(e,n,t){return l(e.operand,n,t)+e.operator}(e,t,r);case 111:return function(e,n,t){const r=""+e.value;return 128&t&&"0"===r.charAt(0)?r.slice(1):JSON.stringify(e.value)}(e,0,r);case 112:return function(e,n,t){return"super"+(e.computed?n.space+"["+l(e.super,n,t)+"]":"."+l(e.super,n,t))}(e,t,r);default:return function(e,n,t){const r=o(n.indent,n.currentIndent++),a=r+n.indent+n.indent;n.currentIndent++;let i="switch"+n.space+"("+l(e.expression,n,t)+")"+n.space+"{"+n.lineEnd;const{clauses:u}=e;for(let e=0;e<u.length;e++){const c=u[e];"CaseClause"===c.type?i+=r+n.indent+"case "+l(c.expression,n,t)+":"+n.lineEnd:i+=r+n.indent+"default:"+n.lineEnd;const s=c.leafs;for(let e=0;e<s.length;e++)i+=a+l(s[e],n,t)+n.lineEnd}return n.currentIndent-=2,i+=r+"}",i}(e,t,r)}},(e,n,t)=>{switch(e.type.charCodeAt(0)){case 66:return function(e,n,t){const{operator:r,left:a,right:i}=e,u=a.type;return l(a,n,t)+(128&t&&"in"===r&&("RegularExpressionLiteral"===u||"IdentifierReference"===u||"NumericLiteral"===u||"FloatingPointLiteral"===u)?" ":n.space)+r+(128&t&&"in"===r&&"IdentifierReference"===i.type?" ":n.space)+l(i,n,t)}(e,n,t);case 70:return r(e,n,8^(8|t));default:return function(e,n,t){return f(e.value,t)}(e,0,t)}},(e,n,t,r)=>111===r?function(e,n,t){return l(e.shortCircuit,n,t)+n.space+"?"+n.space+l(e.consequent,n,t)+n.space+":"+n.space+l(e.alternate,n,t)}(e,n,t):function(e,n,t){return"..."+l(e.argument,n,t)}(e,n,t),(e,n,t,r)=>{switch(r){case 105:return function(e,n,t){return"..."+l(e.argument,n,t)}(e,n,t);case 111:return function(e,n,t){return"["+l(e.expression,n,t)+"]"}(e,n,t);default:return function(e){return JSON.stringify(e.value)}(e)}},(e,n,t,r)=>{switch(r){case 114:return function(e,n,t){return"break"+(e.label?n.space+l(e.label,n,t):"")+u(t)}(e,n,t);case 117:return function(e,n,t){return"super("+s(e.arguments,n,t)+")"}(e,n,t);case 109:return function(e,n,t){return null!==e.moduleSpecifier?"import "+f(e.fromClause.value,t):"import "+l(e.importClause,n,t)+" from "+f(e.fromClause.value,t)}(e,n,t);default:return function(e,n,t){return"class "+(e.name?l(e.name,n,t):"")+(e.heritage?" extends "+l(e.heritage,n,t):"")+n.space+c(e.elements,n,8^(8|t))}(e,n,t)}},(e,n,t)=>{switch(e.type.charCodeAt(0)){case 82:return function(e,n){return"/"+e.pattern+"/"+e.flag+n.space}(e,n);case 79:return function(e,n,t){return l(e.chain,n,t)}(e,n,t);default:return function(e,n,t){return"..."+l(e.argument,n,t)}(e,n,t)}},(n,t,r)=>{switch(n.type.charCodeAt(0)){case 84:return function(e,n,t){return"try "+l(e.block,n,8^(8|t))+(e.catchClause?n.space+l(e.catchClause,n,t):"")+(e.finalizer?" finally "+l(e.finalizer,n,t):"")}(n,t,r);case 65:return e(n,t,r);case 78:return"null";case 83:return function(e,n,t){return"..."+l(e.argument,n,t)}(n,t,r);case 67:return function(e,n,t){return"continue"+(e.label?n.space+l(e.label,n,t):"")+u(t)}(n,t,r);default:return function(e,n,t){return l(e.key,n,t)+":"+n.space+l(e.value,n,t)}(n,t,r)}},(e,n,t)=>65===e.type.charCodeAt(0)?function(e,n,t){return(e.async?"async"+n.space:"")+(e.arrowParameters?"("+s(e.params,n,t)+")":32&t?"("+l(e.params,n,t)+")":l(e.params,n,t))+n.space+"=>"+n.space+l(e.contents,n,t)}(e,n,t):function(e,n,t){return"do"+n.space+l(e.statement,n,8^(8|t))+" while"+n.space+"("+l(e.expression,n,t)+")"+u(t)}(e,n,t),()=>{}],i=[0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function u(e){return 4!=(4&e)&&8&e?"":";"}function c(e,n,t){const r=o(n.indent,n.currentIndent++);let a="{";if(e.length>0){a+=n.lineEnd;let i=e.length-1;for(let u=0;u<e.length;u++)u===i&&(t|=8),a+=r+n.indent+l(e[u],n,t)+n.lineEnd;a+=r}return a+="}",n.currentIndent--,a}function s(e,n,t){let r="";for(let a=0;a<e.length;a+1)r+=l(e[a],n,t),++a<e.length&&(r+=","+n.space);return r}function o(e,n){if(n<1)return"";let t="";for(;n>1;)1&n&&(t+=e),n>>=1,e+=e;return t+=e,t}function l(e,n,t){const r=e.type,i=r.charCodeAt(1);return a[r.length^i-96](e,n,t,i)}function f(e,n,t){let r,a="",u=768&n;for(let t=0;t<e.length;t++)if(r=e.charCodeAt(t),2&i[r])a+="\\",92===r?a+="\\":10===r&&(a+="n"),13===r&&(a+="r");else if(512&n&&r<32||!(u||r>=32&&r<=126))switch(a+="\\",r){case 8:a+="b";break;case 12:a+="f";break;case 9:a+="t";break;default:if(0===r&&0==(1&i[e.charCodeAt(t+1)]))a+="0";else if(11===r)a+="x0B";else{const e=r.toString(16).toUpperCase();a+=512&n||r>65519?"u"+"0000".slice(e.length)+e:"x"+"00".slice(e.length)+e}}else a+=String.fromCharCode(r);const c=64&n?"'":'"';return c+a+c}function p(e,n){let t="",r=" ",a="\n",i=" ",u=0,c=0;if(null!=n)if(n.minify)u|=128,r=a="",i="";else if(n.json&&(u|=512),!1===n.doubleQuotes&&(u|=64),n.disallowStringEscape&&(u|=256),n.semicolons&&(u|=4),n.arrowParens&&(u|=32),n.parentheses&&(u|=16),n.tabs&&(r="\t"),n.removeWhiteSpace&&(r=""),n.tabWidth&&(c=n.tabWidth),n.endOfLine){const e=n.endOfLine;"lf"===e&&(a="\n"),"crlf"===e&&(a="\n\r"),"cr"===e&&(a="\r"),"none"===e&&(a="")}const s=function(e,n,t,r){return{lineEnd:n,space:e,currentIndent:r,indent:t}}(r,a,i,c),f=o(s.indent,s.currentIndent),{directives:p,leafs:d}=e;let m=-1;if(p.length>0){m=p.length-1;for(let n=0;n<p.length;)n===m&&(u|=8),t+=f+l(e.directives[n],s,u),++n<p.length&&(t+=";"+s.lineEnd);t+=f+(8&u&&0===d.length?"":";")+s.lineEnd}m=d.length-1;for(let e=0;e<d.length;e++)e===m&&(u|=8),t+=f+l(d[e],s,u)+s.lineEnd;return t}export{p as generate};