@live-codes/browser-compilers 0.22.1 → 0.22.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var Jinja=(()=>{var Q=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var ke=Object.prototype.hasOwnProperty;var Oe=(e,r)=>{for(var t in r)Q(e,t,{get:r[t],enumerable:!0})},Ve=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of $e(r))!ke.call(e,a)&&a!==t&&Q(e,a,{get:()=>r[a],enumerable:!(n=Ce(r,a))||n.enumerable});return e};var Be=e=>Ve(Q({},"__esModule",{value:!0}),e);var dt={};Oe(dt,{Environment:()=>P,Interpreter:()=>ge,Template:()=>bt,parse:()=>ve,tokenize:()=>he});var l=Object.freeze({Text:"Text",NumericLiteral:"NumericLiteral",StringLiteral:"StringLiteral",Identifier:"Identifier",Equals:"Equals",OpenParen:"OpenParen",CloseParen:"CloseParen",OpenStatement:"OpenStatement",CloseStatement:"CloseStatement",OpenExpression:"OpenExpression",CloseExpression:"CloseExpression",OpenSquareBracket:"OpenSquareBracket",CloseSquareBracket:"CloseSquareBracket",OpenCurlyBracket:"OpenCurlyBracket",CloseCurlyBracket:"CloseCurlyBracket",Comma:"Comma",Dot:"Dot",Colon:"Colon",Pipe:"Pipe",CallOperator:"CallOperator",AdditiveBinaryOperator:"AdditiveBinaryOperator",MultiplicativeBinaryOperator:"MultiplicativeBinaryOperator",ComparisonBinaryOperator:"ComparisonBinaryOperator",UnaryOperator:"UnaryOperator",Comment:"Comment"}),U=class{constructor(e,r){this.value=e,this.type=r}};function ie(e){return/\w/.test(e)}function R(e){return/[0-9]/.test(e)}var Ae=[["{%",l.OpenStatement],["%}",l.CloseStatement],["{{",l.OpenExpression],["}}",l.CloseExpression],["(",l.OpenParen],[")",l.CloseParen],["{",l.OpenCurlyBracket],["}",l.CloseCurlyBracket],["[",l.OpenSquareBracket],["]",l.CloseSquareBracket],[",",l.Comma],[".",l.Dot],[":",l.Colon],["|",l.Pipe],["<=",l.ComparisonBinaryOperator],[">=",l.ComparisonBinaryOperator],["==",l.ComparisonBinaryOperator],["!=",l.ComparisonBinaryOperator],["<",l.ComparisonBinaryOperator],[">",l.ComparisonBinaryOperator],["+",l.AdditiveBinaryOperator],["-",l.AdditiveBinaryOperator],["~",l.AdditiveBinaryOperator],["*",l.MultiplicativeBinaryOperator],["/",l.MultiplicativeBinaryOperator],["%",l.MultiplicativeBinaryOperator],["=",l.Equals]],Ie=new Map([["n",`
|
|
2
|
+
`],["t"," "],["r","\r"],["b","\b"],["f","\f"],["v","\v"],["'","'"],['"','"'],["\\","\\"]]);function Me(e,r={}){return e.endsWith(`
|
|
3
|
+
`)&&(e=e.slice(0,-1)),r.lstrip_blocks&&(e=e.replace(/^[ \t]*({[#%-])/gm,"$1")),r.trim_blocks&&(e=e.replace(/([#%-]})\n/g,"$1")),e.replace(/-%}\s*/g,"%}").replace(/\s*{%-/g,"{%").replace(/-}}\s*/g,"}}").replace(/\s*{{-/g,"{{").replace(/-#}\s*/g,"#}").replace(/\s*{#-/g,"{#").replace(/{%\s*generation\s*%}.+?{%\s*endgeneration\s*%}/gs,"")}function he(e,r={}){let t=[],n=Me(e,r),a=0,s=0,i=p=>{let h="";for(;p(n[a]);){if(n[a]==="\\"){if(++a,a>=n.length)throw new SyntaxError("Unexpected end of input");let c=n[a++],y=Ie.get(c);if(y===void 0)throw new SyntaxError(`Unexpected escaped character: ${c}`);h+=y;continue}if(h+=n[a++],a>=n.length)throw new SyntaxError("Unexpected end of input")}return h};e:for(;a<n.length;){let p=t.at(-1)?.type;if(p===void 0||p===l.CloseStatement||p===l.CloseExpression||p===l.Comment){let c="";for(;a<n.length&&!(n[a]==="{"&&(n[a+1]==="%"||n[a+1]==="{"||n[a+1]==="#"));)c+=n[a++];if(c.length>0){t.push(new U(c,l.Text));continue}}if(n[a]==="{"&&n[a+1]==="#"){a+=2;let c="";for(;n[a]!=="#"||n[a+1]!=="}";){if(a+2>=n.length)throw new SyntaxError("Missing end of comment tag");c+=n[a++]}t.push(new U(c,l.Comment)),a+=2;continue}i(c=>/\s/.test(c));let h=n[a];if(h==="-"||h==="+"){let c=t.at(-1)?.type;if(c===l.Text||c===void 0)throw new SyntaxError(`Unexpected character: ${h}`);switch(c){case l.Identifier:case l.NumericLiteral:case l.StringLiteral:case l.CloseParen:case l.CloseSquareBracket:break;default:{++a;let y=i(R);t.push(new U(`${h}${y}`,y.length>0?l.NumericLiteral:l.UnaryOperator));continue}}}for(let[c,y]of Ae){if(c==="}}"&&s>0)continue;if(n.slice(a,a+c.length)===c){t.push(new U(c,y)),y===l.OpenExpression?s=0:y===l.OpenCurlyBracket?++s:y===l.CloseCurlyBracket&&--s,a+=c.length;continue e}}if(h==="'"||h==='"'){++a;let c=i(y=>y!==h);t.push(new U(c,l.StringLiteral)),++a;continue}if(R(h)){let c=i(R);if(n[a]==="."&&R(n[a+1])){++a;let y=i(R);c=`${c}.${y}`}t.push(new U(c,l.NumericLiteral));continue}if(ie(h)){let c=i(ie);t.push(new U(c,l.Identifier));continue}throw new SyntaxError(`Unexpected character: ${h}`)}return t}var _=class{type="Statement"},Le=class extends _{constructor(e){super(),this.body=e}type="Program"},_e=class extends _{constructor(e,r,t){super(),this.test=e,this.body=r,this.alternate=t}type="If"},Fe=class extends _{constructor(e,r,t,n){super(),this.loopvar=e,this.iterable=r,this.body=t,this.defaultBlock=n}type="For"},Te=class extends _{type="Break"},je=class extends _{type="Continue"},Ue=class extends _{constructor(e,r,t){super(),this.assignee=e,this.value=r,this.body=t}type="Set"},Pe=class extends _{constructor(e,r,t){super(),this.name=e,this.args=r,this.body=t}type="Macro"},Ne=class extends _{constructor(e){super(),this.value=e}type="Comment"},A=class extends _{type="Expression"},qe=class extends A{constructor(e,r,t){super(),this.object=e,this.property=r,this.computed=t}type="MemberExpression"},oe=class extends A{constructor(e,r){super(),this.callee=e,this.args=r}type="CallExpression"},D=class extends A{constructor(e){super(),this.value=e}type="Identifier"},K=class extends A{constructor(e){super(),this.value=e}type="Literal"},De=class extends K{type="IntegerLiteral"},Ke=class extends K{type="FloatLiteral"},ue=class extends K{type="StringLiteral"},Re=class extends K{type="ArrayLiteral"},ce=class extends K{type="TupleLiteral"},ze=class extends K{type="ObjectLiteral"},z=class extends A{constructor(e,r,t){super(),this.operator=e,this.left=r,this.right=t}type="BinaryExpression"},We=class extends A{constructor(e,r){super(),this.operand=e,this.filter=r}type="FilterExpression"},Je=class extends _{constructor(e,r){super(),this.filter=e,this.body=r}type="FilterStatement"},He=class extends A{constructor(e,r){super(),this.lhs=e,this.test=r}type="SelectExpression"},Ye=class extends A{constructor(e,r,t){super(),this.operand=e,this.negate=r,this.test=t}type="TestExpression"},Ge=class extends A{constructor(e,r){super(),this.operator=e,this.argument=r}type="UnaryExpression"},Qe=class extends A{constructor(e=void 0,r=void 0,t=void 0){super(),this.start=e,this.stop=r,this.step=t}type="SliceExpression"},Xe=class extends A{constructor(e,r){super(),this.key=e,this.value=r}type="KeywordArgumentExpression"},Ze=class extends A{constructor(e){super(),this.argument=e}type="SpreadExpression"},et=class extends _{constructor(e,r,t){super(),this.call=e,this.callerArgs=r,this.body=t}type="CallStatement"},tt=class extends A{constructor(e,r,t){super(),this.condition=e,this.trueExpr=r,this.falseExpr=t}type="Ternary"};function ve(e){let r=new Le([]),t=0;function n(o,u){let f=e[t++];if(!f||f.type!==o)throw new Error(`Parser Error: ${u}. ${f.type} !== ${o}.`);return f}function a(o){if(!h(o))throw new SyntaxError(`Expected ${o}`);++t}function s(){switch(e[t].type){case l.Comment:return new Ne(e[t++].value);case l.Text:return c();case l.OpenStatement:return y();case l.OpenExpression:return E();default:throw new SyntaxError(`Unexpected token type: ${e[t].type}`)}}function i(...o){return t+o.length<=e.length&&o.every((u,f)=>u===e[t+f].type)}function p(...o){return e[t]?.type===l.OpenStatement&&e[t+1]?.type===l.Identifier&&o.includes(e[t+1]?.value)}function h(...o){return t+o.length<=e.length&&o.every((u,f)=>e[t+f].type==="Identifier"&&u===e[t+f].value)}function c(){return new ue(n(l.Text,"Expected text token").value)}function y(){if(n(l.OpenStatement,"Expected opening statement token"),e[t].type!==l.Identifier)throw new SyntaxError(`Unknown statement, got ${e[t].type}`);let o=e[t].value,u;switch(o){case"set":++t,u=I();break;case"if":++t,u=S(),n(l.OpenStatement,"Expected {% token"),a("endif"),n(l.CloseStatement,"Expected %} token");break;case"macro":++t,u=N(),n(l.OpenStatement,"Expected {% token"),a("endmacro"),n(l.CloseStatement,"Expected %} token");break;case"for":++t,u=T(),n(l.OpenStatement,"Expected {% token"),a("endfor"),n(l.CloseStatement,"Expected %} token");break;case"call":{++t;let f=null;i(l.OpenParen)&&(f=H());let $=j();if($.type!=="Identifier")throw new SyntaxError("Expected identifier following call statement");let de=H();n(l.CloseStatement,"Expected closing statement token");let le=[];for(;!p("endcall");)le.push(s());n(l.OpenStatement,"Expected '{%'"),a("endcall"),n(l.CloseStatement,"Expected closing statement token");let Se=new oe($,de);u=new et(Se,f,le);break}case"break":++t,n(l.CloseStatement,"Expected closing statement token"),u=new Te;break;case"continue":++t,n(l.CloseStatement,"Expected closing statement token"),u=new je;break;case"filter":{++t;let f=j();f instanceof D&&i(l.OpenParen)&&(f=J(f)),n(l.CloseStatement,"Expected closing statement token");let $=[];for(;!p("endfilter");)$.push(s());n(l.OpenStatement,"Expected '{%'"),a("endfilter"),n(l.CloseStatement,"Expected '%}'"),u=new Je(f,$);break}default:throw new SyntaxError(`Unknown statement type: ${o}`)}return u}function E(){n(l.OpenExpression,"Expected opening expression token");let o=M();return n(l.CloseExpression,"Expected closing expression token"),o}function I(){let o=q(),u=null,f=[];if(i(l.Equals))++t,u=q();else{for(n(l.CloseStatement,"Expected %} token");!p("endset");)f.push(s());n(l.OpenStatement,"Expected {% token"),a("endset")}return n(l.CloseStatement,"Expected closing statement token"),new Ue(o,u,f)}function S(){let o=M();n(l.CloseStatement,"Expected closing statement token");let u=[],f=[];for(;!p("elif","else","endif");)u.push(s());if(p("elif")){++t,++t;let $=S();f.push($)}else if(p("else"))for(++t,++t,n(l.CloseStatement,"Expected closing statement token");!p("endif");)f.push(s());return new _e(o,u,f)}function N(){let o=j();if(o.type!=="Identifier")throw new SyntaxError("Expected identifier following macro statement");let u=H();n(l.CloseStatement,"Expected closing statement token");let f=[];for(;!p("endmacro");)f.push(s());return new Pe(o,u,f)}function q(o=!1){let u=o?j:M,f=[u()],$=i(l.Comma);for(;$&&(++t,f.push(u()),!!i(l.Comma)););return $?new ce(f):f[0]}function T(){let o=q(!0);if(!(o instanceof D||o instanceof ce))throw new SyntaxError(`Expected identifier/tuple for the loop variable, got ${o.type} instead`);if(!h("in"))throw new SyntaxError("Expected `in` keyword following loop variable");++t;let u=M();n(l.CloseStatement,"Expected closing statement token");let f=[];for(;!p("endfor","else");)f.push(s());let $=[];if(p("else"))for(++t,++t,n(l.CloseStatement,"Expected closing statement token");!p("endfor");)$.push(s());return new Fe(o,u,f,$)}function M(){return Z()}function Z(){let o=ee();if(h("if")){++t;let u=ee();if(h("else")){++t;let f=Z();return new tt(u,o,f)}else return new He(o,u)}return o}function ee(){let o=te();for(;h("or");){let u=e[t];++t;let f=te();o=new z(u,o,f)}return o}function te(){let o=G();for(;h("and");){let u=e[t];++t;let f=G();o=new z(u,o,f)}return o}function G(){let o;for(;h("not");){let u=e[t];++t;let f=G();o=new Ge(u,f)}return o??ye()}function ye(){let o=re();for(;;){let u;if(h("not","in"))u=new U("not in",l.Identifier),t+=2;else if(h("in"))u=e[t++];else if(i(l.ComparisonBinaryOperator))u=e[t++];else break;let f=re();o=new z(u,o,f)}return o}function re(){let o=ae();for(;i(l.AdditiveBinaryOperator);){let u=e[t];++t;let f=ae();o=new z(u,o,f)}return o}function me(){let o=ne(j());return i(l.OpenParen)?J(o):o}function J(o){let u=new oe(o,H());return u=ne(u),i(l.OpenParen)&&(u=J(u)),u}function H(){n(l.OpenParen,"Expected opening parenthesis for arguments list");let o=Ee();return n(l.CloseParen,"Expected closing parenthesis for arguments list"),o}function Ee(){let o=[];for(;!i(l.CloseParen);){let u;if(e[t].type===l.MultiplicativeBinaryOperator&&e[t].value==="*"){++t;let f=M();u=new Ze(f)}else if(u=M(),i(l.Equals)){if(++t,!(u instanceof D))throw new SyntaxError("Expected identifier for keyword argument");let f=M();u=new Xe(u,f)}o.push(u),i(l.Comma)&&++t}return o}function xe(){let o=[],u=!1;for(;!i(l.CloseSquareBracket);)i(l.Colon)?(o.push(void 0),++t,u=!0):(o.push(M()),i(l.Colon)&&(++t,u=!0));if(o.length===0)throw new SyntaxError("Expected at least one argument for member/slice expression");if(u){if(o.length>3)throw new SyntaxError("Expected 0-3 arguments for slice expression");return new Qe(...o)}return o[0]}function ne(o){for(;i(l.Dot)||i(l.OpenSquareBracket);){let u=e[t];++t;let f,$=u.type===l.OpenSquareBracket;if($)f=xe(),n(l.CloseSquareBracket,"Expected closing square bracket");else if(f=j(),f.type!=="Identifier")throw new SyntaxError("Expected identifier following dot operator");o=new qe(o,f,$)}return o}function ae(){let o=se();for(;i(l.MultiplicativeBinaryOperator);){let u=e[t++],f=se();o=new z(u,o,f)}return o}function se(){let o=be();for(;h("is");){++t;let u=h("not");u&&++t;let f=j();if(!(f instanceof D))throw new SyntaxError("Expected identifier for the test");o=new Ye(o,u,f)}return o}function be(){let o=me();for(;i(l.Pipe);){++t;let u=j();if(!(u instanceof D))throw new SyntaxError("Expected identifier for the filter");i(l.OpenParen)&&(u=J(u)),o=new We(o,u)}return o}function j(){let o=e[t++];switch(o.type){case l.NumericLiteral:{let u=o.value;return u.includes(".")?new Ke(Number(u)):new De(Number(u))}case l.StringLiteral:{let u=o.value;for(;i(l.StringLiteral);)u+=e[t++].value;return new ue(u)}case l.Identifier:return new D(o.value);case l.OpenParen:{let u=q();return n(l.CloseParen,"Expected closing parenthesis, got ${tokens[current].type} instead."),u}case l.OpenSquareBracket:{let u=[];for(;!i(l.CloseSquareBracket);)u.push(M()),i(l.Comma)&&++t;return++t,new Re(u)}case l.OpenCurlyBracket:{let u=new Map;for(;!i(l.CloseCurlyBracket);){let f=M();n(l.Colon,"Expected colon between key and value in object literal");let $=M();u.set(f,$),i(l.Comma)&&++t}return++t,new ze(u)}default:throw new SyntaxError(`Unexpected token: ${o.type}`)}}for(;t<e.length;)r.body.push(s());return r}function rt(e,r,t=1){r===void 0&&(r=e,e=0);let n=[];for(let a=e;a<r;a+=t)n.push(a);return n}function pe(e,r,t,n=1){let a=Math.sign(n);a>=0?(r=(r??=0)<0?Math.max(e.length+r,0):Math.min(r,e.length),t=(t??=e.length)<0?Math.max(e.length+t,0):Math.min(t,e.length)):(r=(r??=e.length-1)<0?Math.max(e.length+r,-1):Math.min(r,e.length-1),t=(t??=-1)<-1?Math.max(e.length+t,-1):Math.min(t,e.length-1));let s=[];for(let i=r;a*i<a*t;i+=n)s.push(e[i]);return s}function nt(e){return e.replace(/\b\w/g,r=>r.toUpperCase())}function at(e){return st(new Date,e)}function st(e,r){let t=new Intl.DateTimeFormat(void 0,{month:"long"}),n=new Intl.DateTimeFormat(void 0,{month:"short"}),a=s=>s<10?"0"+s:s.toString();return r.replace(/%[YmdbBHM%]/g,s=>{switch(s){case"%Y":return e.getFullYear().toString();case"%m":return a(e.getMonth()+1);case"%d":return a(e.getDate());case"%b":return n.format(e);case"%B":return t.format(e);case"%H":return a(e.getHours());case"%M":return a(e.getMinutes());case"%%":return"%";default:return s}})}function lt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function it(e,r,t,n){if(n===0)return e;let a=n==null||n<0?1/0:n,s=r.length===0?new RegExp("(?=)","gu"):new RegExp(lt(r),"gu");return e.replaceAll(s,i=>a>0?(--a,t):i)}var fe=class extends Error{},we=class extends Error{},F=class{type="RuntimeValue";value;builtins=new Map;constructor(e=void 0){this.value=e}__bool__(){return new m(!!this.value)}toString(){return String(this.value)}},v=class extends F{type="IntegerValue"},d=class extends F{type="FloatValue";toString(){return this.value%1===0?this.value.toFixed(1):this.value.toString()}},w=class extends F{type="StringValue";builtins=new Map([["upper",new b(()=>new w(this.value.toUpperCase()))],["lower",new b(()=>new w(this.value.toLowerCase()))],["strip",new b(()=>new w(this.value.trim()))],["title",new b(()=>new w(nt(this.value)))],["capitalize",new b(()=>new w(this.value.charAt(0).toUpperCase()+this.value.slice(1)))],["length",new v(this.value.length)],["rstrip",new b(()=>new w(this.value.trimEnd()))],["lstrip",new b(()=>new w(this.value.trimStart()))],["startswith",new b(e=>{if(e.length===0)throw new Error("startswith() requires at least one argument");let r=e[0];if(r instanceof w)return new m(this.value.startsWith(r.value));if(r instanceof x){for(let t of r.value){if(!(t instanceof w))throw new Error("startswith() tuple elements must be strings");if(this.value.startsWith(t.value))return new m(!0)}return new m(!1)}throw new Error("startswith() argument must be a string or tuple of strings")})],["endswith",new b(e=>{if(e.length===0)throw new Error("endswith() requires at least one argument");let r=e[0];if(r instanceof w)return new m(this.value.endsWith(r.value));if(r instanceof x){for(let t of r.value){if(!(t instanceof w))throw new Error("endswith() tuple elements must be strings");if(this.value.endsWith(t.value))return new m(!0)}return new m(!1)}throw new Error("endswith() argument must be a string or tuple of strings")})],["split",new b(e=>{let r=e[0]??new V;if(!(r instanceof w||r instanceof V))throw new Error("sep argument must be a string or null");let t=e[1]??new v(-1);if(!(t instanceof v))throw new Error("maxsplit argument must be a number");let n=[];if(r instanceof V){let a=this.value.trimStart();for(let{0:s,index:i}of a.matchAll(/\S+/g)){if(t.value!==-1&&n.length>=t.value&&i!==void 0){n.push(s+a.slice(i+s.length));break}n.push(s)}}else{if(r.value==="")throw new Error("empty separator");n=this.value.split(r.value),t.value!==-1&&n.length>t.value&&n.push(n.splice(t.value).join(r.value))}return new x(n.map(a=>new w(a)))})],["replace",new b(e=>{if(e.length<2)throw new Error("replace() requires at least two arguments");let r=e[0],t=e[1];if(!(r instanceof w&&t instanceof w))throw new Error("replace() arguments must be strings");let n;if(e.length>2?e[2].type==="KeywordArgumentsValue"?n=e[2].value.get("count")??new V:n=e[2]:n=new V,!(n instanceof v||n instanceof V))throw new Error("replace() count argument must be a number or null");return new w(it(this.value,r.value,t.value,n.value))})]])},m=class extends F{type="BooleanValue"},B=class extends F{type="ObjectValue";__bool__(){return new m(this.value.size>0)}builtins=new Map([["get",new b(([e,r])=>{if(!(e instanceof w))throw new Error(`Object key must be a string: got ${e.type}`);return this.value.get(e.value)??r??new V})],["items",new b(()=>this.items())],["keys",new b(()=>this.keys())],["values",new b(()=>this.values())]]);items(){return new x(Array.from(this.value.entries()).map(([e,r])=>new x([new w(e),r])))}keys(){return new x(Array.from(this.value.keys()).map(e=>new w(e)))}values(){return new x(Array.from(this.value.values()))}},X=class extends B{type="KeywordArgumentsValue"},x=class extends F{type="ArrayValue";builtins=new Map([["length",new v(this.value.length)]]);__bool__(){return new m(this.value.length>0)}},ot=class extends x{type="TupleValue"},b=class extends F{type="FunctionValue"},V=class extends F{type="NullValue"},k=class extends F{type="UndefinedValue"},P=class{constructor(e){this.parent=e}variables=new Map([["namespace",new b(e=>{if(e.length===0)return new B(new Map);if(e.length!==1||!(e[0]instanceof B))throw new Error("`namespace` expects either zero arguments or a single object argument");return e[0]})]]);tests=new Map([["boolean",e=>e.type==="BooleanValue"],["callable",e=>e instanceof b],["odd",e=>{if(!(e instanceof v))throw new Error(`cannot odd on ${e.type}`);return e.value%2!==0}],["even",e=>{if(!(e instanceof v))throw new Error(`cannot even on ${e.type}`);return e.value%2===0}],["false",e=>e.type==="BooleanValue"&&!e.value],["true",e=>e.type==="BooleanValue"&&e.value],["none",e=>e.type==="NullValue"],["string",e=>e.type==="StringValue"],["number",e=>e instanceof v||e instanceof d],["integer",e=>e instanceof v],["iterable",e=>e.type==="ArrayValue"||e.type==="StringValue"],["mapping",e=>e.type==="ObjectValue"],["lower",e=>{let r=e.value;return e.type==="StringValue"&&r===r.toLowerCase()}],["upper",e=>{let r=e.value;return e.type==="StringValue"&&r===r.toUpperCase()}],["none",e=>e.type==="NullValue"],["defined",e=>e.type!=="UndefinedValue"],["undefined",e=>e.type==="UndefinedValue"],["equalto",(e,r)=>e.value===r.value],["eq",(e,r)=>e.value===r.value]]);set(e,r){return this.declareVariable(e,Y(r))}declareVariable(e,r){if(this.variables.has(e))throw new SyntaxError(`Variable already declared: ${e}`);return this.variables.set(e,r),r}setVariable(e,r){return this.variables.set(e,r),r}resolve(e){if(this.variables.has(e))return this;if(this.parent)return this.parent.resolve(e);throw new Error(`Unknown variable: ${e}`)}lookupVariable(e){try{return this.resolve(e).variables.get(e)??new k}catch{return new k}}};function ut(e){e.set("false",!1),e.set("true",!0),e.set("none",null),e.set("raise_exception",r=>{throw new Error(r)}),e.set("range",rt),e.set("strftime_now",at),e.set("True",!0),e.set("False",!1),e.set("None",null)}var ge=class{global;constructor(e){this.global=e??new P}run(e){return this.evaluate(e,this.global)}evaluateBinaryExpression(e,r){let t=this.evaluate(e.left,r);switch(e.operator.value){case"and":return t.__bool__().value?this.evaluate(e.right,r):t;case"or":return t.__bool__().value?t:this.evaluate(e.right,r)}let n=this.evaluate(e.right,r);switch(e.operator.value){case"==":return new m(t.value==n.value);case"!=":return new m(t.value!=n.value)}if(t instanceof k||n instanceof k){if(n instanceof k&&["in","not in"].includes(e.operator.value))return new m(e.operator.value==="not in");throw new Error(`Cannot perform operation ${e.operator.value} on undefined values`)}else{if(t instanceof V||n instanceof V)throw new Error("Cannot perform operation on null values");if(e.operator.value==="~")return new w(t.value.toString()+n.value.toString());if((t instanceof v||t instanceof d)&&(n instanceof v||n instanceof d)){let a=t.value,s=n.value;switch(e.operator.value){case"+":case"-":case"*":{let i=e.operator.value==="+"?a+s:e.operator.value==="-"?a-s:a*s;return t instanceof d||n instanceof d?new d(i):new v(i)}case"/":return new d(a/s);case"%":{let i=a%s;return t instanceof d||n instanceof d?new d(i):new v(i)}case"<":return new m(a<s);case">":return new m(a>s);case">=":return new m(a>=s);case"<=":return new m(a<=s)}}else if(t instanceof x&&n instanceof x)switch(e.operator.value){case"+":return new x(t.value.concat(n.value))}else if(n instanceof x){let a=n.value.find(s=>s.value===t.value)!==void 0;switch(e.operator.value){case"in":return new m(a);case"not in":return new m(!a)}}}if(t instanceof w||n instanceof w)switch(e.operator.value){case"+":return new w(t.value.toString()+n.value.toString())}if(t instanceof w&&n instanceof w)switch(e.operator.value){case"in":return new m(n.value.includes(t.value));case"not in":return new m(!n.value.includes(t.value))}if(t instanceof w&&n instanceof B)switch(e.operator.value){case"in":return new m(n.value.has(t.value));case"not in":return new m(!n.value.has(t.value))}throw new SyntaxError(`Unknown operator "${e.operator.value}" between ${t.type} and ${n.type}`)}evaluateArguments(e,r){let t=[],n=new Map;for(let a of e)if(a.type==="SpreadExpression"){let s=a,i=this.evaluate(s.argument,r);if(!(i instanceof x))throw new Error(`Cannot unpack non-iterable type: ${i.type}`);for(let p of i.value)t.push(p)}else if(a.type==="KeywordArgumentExpression"){let s=a;n.set(s.key.value,this.evaluate(s.value,r))}else{if(n.size>0)throw new Error("Positional arguments must come before keyword arguments");t.push(this.evaluate(a,r))}return[t,n]}applyFilter(e,r,t){if(r.type==="Identifier"){let n=r;if(n.value==="tojson")return new w(W(e));if(e instanceof x)switch(n.value){case"list":return e;case"first":return e.value[0];case"last":return e.value[e.value.length-1];case"length":return new v(e.value.length);case"reverse":return new x(e.value.reverse());case"sort":return new x(e.value.sort((a,s)=>{if(a.type!==s.type)throw new Error(`Cannot compare different types: ${a.type} and ${s.type}`);switch(a.type){case"IntegerValue":case"FloatValue":return a.value-s.value;case"StringValue":return a.value.localeCompare(s.value);default:throw new Error(`Cannot compare type: ${a.type}`)}}));case"join":return new w(e.value.map(a=>a.value).join(""));case"string":return new w(W(e));case"unique":{let a=new Set,s=[];for(let i of e.value)a.has(i.value)||(a.add(i.value),s.push(i));return new x(s)}default:throw new Error(`Unknown ArrayValue filter: ${n.value}`)}else if(e instanceof w)switch(n.value){case"length":case"upper":case"lower":case"title":case"capitalize":{let a=e.builtins.get(n.value);if(a instanceof b)return a.value([],t);if(a instanceof v)return a;throw new Error(`Unknown StringValue filter: ${n.value}`)}case"trim":return new w(e.value.trim());case"indent":return new w(e.value.split(`
|
|
4
|
+
`).map((a,s)=>s===0||a.length===0?a:" "+a).join(`
|
|
5
|
+
`));case"join":case"string":return e;case"int":{let a=parseInt(e.value,10);return new v(isNaN(a)?0:a)}case"float":{let a=parseFloat(e.value);return new d(isNaN(a)?0:a)}default:throw new Error(`Unknown StringValue filter: ${n.value}`)}else if(e instanceof v||e instanceof d)switch(n.value){case"abs":return e instanceof v?new v(Math.abs(e.value)):new d(Math.abs(e.value));case"int":return new v(Math.floor(e.value));case"float":return new d(e.value);default:throw new Error(`Unknown NumericValue filter: ${n.value}`)}else if(e instanceof B)switch(n.value){case"items":return new x(Array.from(e.value.entries()).map(([a,s])=>new x([new w(a),s])));case"length":return new v(e.value.size);default:throw new Error(`Unknown ObjectValue filter: ${n.value}`)}else if(e instanceof m)switch(n.value){case"bool":return new m(e.value);case"int":return new v(e.value?1:0);case"float":return new d(e.value?1:0);case"string":return new w(e.value?"true":"false");default:throw new Error(`Unknown BooleanValue filter: ${n.value}`)}throw new Error(`Cannot apply filter "${n.value}" to type: ${e.type}`)}else if(r.type==="CallExpression"){let n=r;if(n.callee.type!=="Identifier")throw new Error(`Unknown filter: ${n.callee.type}`);let a=n.callee.value;if(a==="tojson"){let[,s]=this.evaluateArguments(n.args,t),i=s.get("indent")??new V;if(!(i instanceof v||i instanceof V))throw new Error("If set, indent must be a number");return new w(W(e,i.value))}else if(a==="join"){let s;if(e instanceof w)s=Array.from(e.value);else if(e instanceof x)s=e.value.map(c=>c.value);else throw new Error(`Cannot apply filter "${a}" to type: ${e.type}`);let[i,p]=this.evaluateArguments(n.args,t),h=i.at(0)??p.get("separator")??new w("");if(!(h instanceof w))throw new Error("separator must be a string");return new w(s.join(h.value))}else if(a==="int"||a==="float"){let[s,i]=this.evaluateArguments(n.args,t),p=s.at(0)??i.get("default")??(a==="int"?new v(0):new d(0));if(e instanceof w){let h=a==="int"?parseInt(e.value,10):parseFloat(e.value);return isNaN(h)?p:a==="int"?new v(h):new d(h)}else{if(e instanceof v||e instanceof d)return e;if(e instanceof m)return a==="int"?new v(e.value?1:0):new d(e.value?1:0);throw new Error(`Cannot apply filter "${a}" to type: ${e.type}`)}}else if(a==="default"){let[s,i]=this.evaluateArguments(n.args,t),p=s[0]??new w(""),h=s[1]??i.get("boolean")??new m(!1);if(!(h instanceof m))throw new Error("`default` filter flag must be a boolean");return e instanceof k||h.value&&!e.__bool__().value?p:e}if(e instanceof x){switch(a){case"selectattr":case"rejectattr":{let s=a==="selectattr";if(e.value.some(E=>!(E instanceof B)))throw new Error(`\`${a}\` can only be applied to array of objects`);if(n.args.some(E=>E.type!=="StringLiteral"))throw new Error(`arguments of \`${a}\` must be strings`);let[i,p,h]=n.args.map(E=>this.evaluate(E,t)),c;if(p){let E=t.tests.get(p.value);if(!E)throw new Error(`Unknown test: ${p.value}`);c=E}else c=(...E)=>E[0].__bool__().value;let y=e.value.filter(E=>{let I=E.value.get(i.value),S=I?c(I,h):!1;return s?S:!S});return new x(y)}case"map":{let[,s]=this.evaluateArguments(n.args,t);if(s.has("attribute")){let i=s.get("attribute");if(!(i instanceof w))throw new Error("attribute must be a string");let p=s.get("default"),h=e.value.map(c=>{if(!(c instanceof B))throw new Error("items in map must be an object");return c.value.get(i.value)??p??new k});return new x(h)}else throw new Error("`map` expressions without `attribute` set are not currently supported.")}}throw new Error(`Unknown ArrayValue filter: ${a}`)}else if(e instanceof w){switch(a){case"indent":{let[s,i]=this.evaluateArguments(n.args,t),p=s.at(0)??i.get("width")??new v(4);if(!(p instanceof v))throw new Error("width must be a number");let h=s.at(1)??i.get("first")??new m(!1),c=s.at(2)??i.get("blank")??new m(!1),y=e.value.split(`
|
|
6
|
+
`),E=" ".repeat(p.value),I=y.map((S,N)=>!h.value&&N===0||!c.value&&S.length===0?S:E+S);return new w(I.join(`
|
|
7
|
+
`))}case"replace":{let s=e.builtins.get("replace");if(!(s instanceof b))throw new Error("replace filter not available");let[i,p]=this.evaluateArguments(n.args,t);return s.value([...i,new X(p)],t)}}throw new Error(`Unknown StringValue filter: ${a}`)}else throw new Error(`Cannot apply filter "${a}" to type: ${e.type}`)}throw new Error(`Unknown filter: ${r.type}`)}evaluateFilterExpression(e,r){let t=this.evaluate(e.operand,r);return this.applyFilter(t,e.filter,r)}evaluateTestExpression(e,r){let t=this.evaluate(e.operand,r),n=r.tests.get(e.test.value);if(!n)throw new Error(`Unknown test: ${e.test.value}`);let a=n(t);return new m(e.negate?!a:a)}evaluateSelectExpression(e,r){return this.evaluate(e.test,r).__bool__().value?this.evaluate(e.lhs,r):new k}evaluateUnaryExpression(e,r){let t=this.evaluate(e.argument,r);switch(e.operator.value){case"not":return new m(!t.value);default:throw new SyntaxError(`Unknown operator: ${e.operator.value}`)}}evaluateTernaryExpression(e,r){return this.evaluate(e.condition,r).__bool__().value?this.evaluate(e.trueExpr,r):this.evaluate(e.falseExpr,r)}evalProgram(e,r){return this.evaluateBlock(e.body,r)}evaluateBlock(e,r){let t="";for(let n of e){let a=this.evaluate(n,r);a.type!=="NullValue"&&a.type!=="UndefinedValue"&&(t+=a.toString())}return new w(t)}evaluateIdentifier(e,r){return r.lookupVariable(e.value)}evaluateCallExpression(e,r){let[t,n]=this.evaluateArguments(e.args,r);n.size>0&&t.push(new X(n));let a=this.evaluate(e.callee,r);if(a.type!=="FunctionValue")throw new Error(`Cannot call something that is not a function: got ${a.type}`);return a.value(t,r)}evaluateSliceExpression(e,r,t){if(!(e instanceof x||e instanceof w))throw new Error("Slice object must be an array or string");let n=this.evaluate(r.start,t),a=this.evaluate(r.stop,t),s=this.evaluate(r.step,t);if(!(n instanceof v||n instanceof k))throw new Error("Slice start must be numeric or undefined");if(!(a instanceof v||a instanceof k))throw new Error("Slice stop must be numeric or undefined");if(!(s instanceof v||s instanceof k))throw new Error("Slice step must be numeric or undefined");return e instanceof x?new x(pe(e.value,n.value,a.value,s.value)):new w(pe(Array.from(e.value),n.value,a.value,s.value).join(""))}evaluateMemberExpression(e,r){let t=this.evaluate(e.object,r),n;if(e.computed){if(e.property.type==="SliceExpression")return this.evaluateSliceExpression(t,e.property,r);n=this.evaluate(e.property,r)}else n=new w(e.property.value);let a;if(t instanceof B){if(!(n instanceof w))throw new Error(`Cannot access property with non-string: got ${n.type}`);a=t.value.get(n.value)??t.builtins.get(n.value)}else if(t instanceof x||t instanceof w)if(n instanceof v)a=t.value.at(n.value),t instanceof w&&(a=new w(t.value.at(n.value)));else if(n instanceof w)a=t.builtins.get(n.value);else throw new Error(`Cannot access property with non-string/non-number: got ${n.type}`);else{if(!(n instanceof w))throw new Error(`Cannot access property with non-string: got ${n.type}`);a=t.builtins.get(n.value)}return a instanceof F?a:new k}evaluateSet(e,r){let t=e.value?this.evaluate(e.value,r):this.evaluateBlock(e.body,r);if(e.assignee.type==="Identifier"){let n=e.assignee.value;r.setVariable(n,t)}else if(e.assignee.type==="TupleLiteral"){let n=e.assignee;if(!(t instanceof x))throw new Error(`Cannot unpack non-iterable type in set: ${t.type}`);let a=t.value;if(a.length!==n.value.length)throw new Error(`Too ${n.value.length>a.length?"few":"many"} items to unpack in set`);for(let s=0;s<n.value.length;++s){let i=n.value[s];if(i.type!=="Identifier")throw new Error(`Cannot unpack to non-identifier in set: ${i.type}`);r.setVariable(i.value,a[s])}}else if(e.assignee.type==="MemberExpression"){let n=e.assignee,a=this.evaluate(n.object,r);if(!(a instanceof B))throw new Error("Cannot assign to member of non-object");if(n.property.type!=="Identifier")throw new Error("Cannot assign to member with non-identifier property");a.value.set(n.property.value,t)}else throw new Error(`Invalid LHS inside assignment expression: ${JSON.stringify(e.assignee)}`);return new V}evaluateIf(e,r){let t=this.evaluate(e.test,r);return this.evaluateBlock(t.__bool__().value?e.body:e.alternate,r)}evaluateFor(e,r){let t=new P(r),n,a;if(e.iterable.type==="SelectExpression"){let c=e.iterable;a=this.evaluate(c.lhs,t),n=c.test}else a=this.evaluate(e.iterable,t);if(!(a instanceof x||a instanceof B))throw new Error(`Expected iterable or object type in for loop: got ${a.type}`);a instanceof B&&(a=a.keys());let s=[],i=[];for(let c=0;c<a.value.length;++c){let y=new P(t),E=a.value[c],I;if(e.loopvar.type==="Identifier")I=S=>S.setVariable(e.loopvar.value,E);else if(e.loopvar.type==="TupleLiteral"){let S=e.loopvar;if(E.type!=="ArrayValue")throw new Error(`Cannot unpack non-iterable type: ${E.type}`);let N=E;if(S.value.length!==N.value.length)throw new Error(`Too ${S.value.length>N.value.length?"few":"many"} items to unpack`);I=q=>{for(let T=0;T<S.value.length;++T){if(S.value[T].type!=="Identifier")throw new Error(`Cannot unpack non-identifier type: ${S.value[T].type}`);q.setVariable(S.value[T].value,N.value[T])}}}else throw new Error(`Invalid loop variable(s): ${e.loopvar.type}`);n&&(I(y),!this.evaluate(n,y).__bool__().value)||(s.push(E),i.push(I))}let p="",h=!0;for(let c=0;c<s.length;++c){let y=new Map([["index",new v(c+1)],["index0",new v(c)],["revindex",new v(s.length-c)],["revindex0",new v(s.length-c-1)],["first",new m(c===0)],["last",new m(c===s.length-1)],["length",new v(s.length)],["previtem",c>0?s[c-1]:new k],["nextitem",c<s.length-1?s[c+1]:new k]]);t.setVariable("loop",new B(y)),i[c](t);try{let E=this.evaluateBlock(e.body,t);p+=E.value}catch(E){if(E instanceof we)continue;if(E instanceof fe)break;throw E}h=!1}if(h){let c=this.evaluateBlock(e.defaultBlock,t);p+=c.value}return new w(p)}evaluateMacro(e,r){return r.setVariable(e.name.value,new b((t,n)=>{let a=new P(n);t=t.slice();let s;t.at(-1)?.type==="KeywordArgumentsValue"&&(s=t.pop());for(let i=0;i<e.args.length;++i){let p=e.args[i],h=t[i];if(p.type==="Identifier"){let c=p;if(!h)throw new Error(`Missing positional argument: ${c.value}`);a.setVariable(c.value,h)}else if(p.type==="KeywordArgumentExpression"){let c=p,y=h??s?.value.get(c.key.value)??this.evaluate(c.value,a);a.setVariable(c.key.value,y)}else throw new Error(`Unknown argument type: ${p.type}`)}return this.evaluateBlock(e.body,a)})),new V}evaluateCallStatement(e,r){let t=new b((p,h)=>{let c=new P(h);if(e.callerArgs)for(let y=0;y<e.callerArgs.length;++y){let E=e.callerArgs[y];if(E.type!=="Identifier")throw new Error(`Caller parameter must be an identifier, got ${E.type}`);c.setVariable(E.value,p[y]??new k)}return this.evaluateBlock(e.body,c)}),[n,a]=this.evaluateArguments(e.call.args,r);n.push(new X(a));let s=this.evaluate(e.call.callee,r);if(s.type!=="FunctionValue")throw new Error(`Cannot call something that is not a function: got ${s.type}`);let i=new P(r);return i.setVariable("caller",t),s.value(n,i)}evaluateFilterStatement(e,r){let t=this.evaluateBlock(e.body,r);return this.applyFilter(t,e.filter,r)}evaluate(e,r){if(!e)return new k;switch(e.type){case"Program":return this.evalProgram(e,r);case"Set":return this.evaluateSet(e,r);case"If":return this.evaluateIf(e,r);case"For":return this.evaluateFor(e,r);case"Macro":return this.evaluateMacro(e,r);case"CallStatement":return this.evaluateCallStatement(e,r);case"Break":throw new fe;case"Continue":throw new we;case"IntegerLiteral":return new v(e.value);case"FloatLiteral":return new d(e.value);case"StringLiteral":return new w(e.value);case"ArrayLiteral":return new x(e.value.map(t=>this.evaluate(t,r)));case"TupleLiteral":return new ot(e.value.map(t=>this.evaluate(t,r)));case"ObjectLiteral":{let t=new Map;for(let[n,a]of e.value){let s=this.evaluate(n,r);if(!(s instanceof w))throw new Error(`Object keys must be strings: got ${s.type}`);t.set(s.value,this.evaluate(a,r))}return new B(t)}case"Identifier":return this.evaluateIdentifier(e,r);case"CallExpression":return this.evaluateCallExpression(e,r);case"MemberExpression":return this.evaluateMemberExpression(e,r);case"UnaryExpression":return this.evaluateUnaryExpression(e,r);case"BinaryExpression":return this.evaluateBinaryExpression(e,r);case"FilterExpression":return this.evaluateFilterExpression(e,r);case"FilterStatement":return this.evaluateFilterStatement(e,r);case"TestExpression":return this.evaluateTestExpression(e,r);case"SelectExpression":return this.evaluateSelectExpression(e,r);case"Ternary":return this.evaluateTernaryExpression(e,r);case"Comment":return new V;default:throw new SyntaxError(`Unknown node type: ${e.type}`)}}};function Y(e){switch(typeof e){case"number":return Number.isInteger(e)?new v(e):new d(e);case"string":return new w(e);case"boolean":return new m(e);case"undefined":return new k;case"object":return e===null?new V:Array.isArray(e)?new x(e.map(Y)):new B(new Map(Object.entries(e).map(([r,t])=>[r,Y(t)])));case"function":return new b((r,t)=>{let n=e(...r.map(a=>a.value))??null;return Y(n)});default:throw new Error(`Cannot convert to runtime value: ${e}`)}}function W(e,r,t){let n=t??0;switch(e.type){case"NullValue":case"UndefinedValue":return"null";case"IntegerValue":case"FloatValue":case"StringValue":case"BooleanValue":return JSON.stringify(e.value);case"ArrayValue":case"ObjectValue":{let a=r?" ".repeat(r):"",s=`
|
|
8
|
+
`+a.repeat(n),i=s+a;if(e.type==="ArrayValue"){let p=e.value.map(h=>W(h,r,n+1));return r?`[${i}${p.join(`,${i}`)}${s}]`:`[${p.join(", ")}]`}else{let p=Array.from(e.value.entries()).map(([h,c])=>{let y=`"${h}": ${W(c,r,n+1)}`;return r?`${i}${y}`:y});return r?`{${p.join(",")}${s}}`:`{${p.join(", ")}}`}}default:throw new Error(`Cannot convert to JSON: ${e.type}`)}}var C=`
|
|
9
|
+
`,ct="{%- ",pt=" -%}";function ft(e){switch(e.operator.type){case"MultiplicativeBinaryOperator":return 4;case"AdditiveBinaryOperator":return 3;case"ComparisonBinaryOperator":return 2;case"Identifier":return e.operator.value==="and"?1:e.operator.value==="in"||e.operator.value==="not in"?2:0}return 0}function wt(e,r=" "){let t=typeof r=="number"?" ".repeat(r):r;return L(e.body,0,t).replace(/\n$/,"")}function O(...e){return ct+e.join(" ")+pt}function L(e,r,t){return e.map(n=>ht(n,r,t)).join(C)}function ht(e,r,t){let n=t.repeat(r);switch(e.type){case"Program":return L(e.body,r,t);case"If":return vt(e,r,t);case"For":return gt(e,r,t);case"Set":return yt(e,r,t);case"Macro":return mt(e,r,t);case"Break":return n+O("break");case"Continue":return n+O("continue");case"CallStatement":return Et(e,r,t);case"FilterStatement":return xt(e,r,t);case"Comment":return n+"{# "+e.value+" #}";default:return n+"{{- "+g(e)+" -}}"}}function vt(e,r,t){let n=t.repeat(r),a=[],s=e;for(;s&&(a.push({test:s.test,body:s.body}),s.alternate.length===1&&s.alternate[0].type==="If");)s=s.alternate[0];let i=n+O("if",g(a[0].test))+C+L(a[0].body,r+1,t);for(let p=1;p<a.length;++p)i+=C+n+O("elif",g(a[p].test))+C+L(a[p].body,r+1,t);return s&&s.alternate.length>0&&(i+=C+n+O("else")+C+L(s.alternate,r+1,t)),i+=C+n+O("endif"),i}function gt(e,r,t){let n=t.repeat(r),a="";if(e.iterable.type==="SelectExpression"){let i=e.iterable;a=`${g(i.lhs)} if ${g(i.test)}`}else a=g(e.iterable);let s=n+O("for",g(e.loopvar),"in",a)+C+L(e.body,r+1,t);return e.defaultBlock.length>0&&(s+=C+n+O("else")+C+L(e.defaultBlock,r+1,t)),s+=C+n+O("endfor"),s}function yt(e,r,t){let n=t.repeat(r),a=g(e.assignee),s=e.value?g(e.value):"",i=n+O("set",`${a}${e.value?" = "+s:""}`);return e.body.length===0?i:i+C+L(e.body,r+1,t)+C+n+O("endset")}function mt(e,r,t){let n=t.repeat(r),a=e.args.map(g).join(", ");return n+O("macro",`${e.name.value}(${a})`)+C+L(e.body,r+1,t)+C+n+O("endmacro")}function Et(e,r,t){let n=t.repeat(r),a=e.callerArgs&&e.callerArgs.length>0?`(${e.callerArgs.map(g).join(", ")})`:"",s=g(e.call),i=n+O(`call${a}`,s)+C;return i+=L(e.body,r+1,t)+C,i+=n+O("endcall"),i}function xt(e,r,t){let n=t.repeat(r),a=e.filter.type==="Identifier"?e.filter.value:g(e.filter),s=n+O("filter",a)+C;return s+=L(e.body,r+1,t)+C,s+=n+O("endfilter"),s}function g(e,r=-1){switch(e.type){case"SpreadExpression":return`*${g(e.argument)}`;case"Identifier":return e.value;case"IntegerLiteral":return`${e.value}`;case"FloatLiteral":return`${e.value}`;case"StringLiteral":return JSON.stringify(e.value);case"BinaryExpression":{let t=e,n=ft(t),a=g(t.left,n),s=g(t.right,n+1),i=`${a} ${t.operator.value} ${s}`;return n<r?`(${i})`:i}case"UnaryExpression":{let t=e;return t.operator.value+(t.operator.value==="not"?" ":"")+g(t.argument,1/0)}case"CallExpression":{let t=e,n=t.args.map(g).join(", ");return`${g(t.callee)}(${n})`}case"MemberExpression":{let t=e,n=g(t.object);["Identifier","MemberExpression","CallExpression","StringLiteral","IntegerLiteral","FloatLiteral","ArrayLiteral","TupleLiteral","ObjectLiteral"].includes(t.object.type)||(n=`(${n})`);let a=g(t.property);return!t.computed&&t.property.type!=="Identifier"&&(a=`(${a})`),t.computed?`${n}[${a}]`:`${n}.${a}`}case"FilterExpression":{let t=e,n=g(t.operand,1/0);return t.filter.type==="CallExpression"?`${n} | ${g(t.filter)}`:`${n} | ${t.filter.value}`}case"SelectExpression":{let t=e;return`${g(t.lhs)} if ${g(t.test)}`}case"TestExpression":{let t=e;return`${g(t.operand)} is${t.negate?" not":""} ${t.test.value}`}case"ArrayLiteral":case"TupleLiteral":{let t=e.value.map(g),n=e.type==="ArrayLiteral"?"[]":"()";return`${n[0]}${t.join(", ")}${n[1]}`}case"ObjectLiteral":return`{${Array.from(e.value.entries()).map(([n,a])=>`${g(n)}: ${g(a)}`).join(", ")}}`;case"SliceExpression":{let t=e,n=t.start?g(t.start):"",a=t.stop?g(t.stop):"",s=t.step?`:${g(t.step)}`:"";return`${n}:${a}${s}`}case"KeywordArgumentExpression":{let t=e;return`${t.key.value}=${g(t.value)}`}case"Ternary":{let t=e,n=`${g(t.trueExpr)} if ${g(t.condition,0)} else ${g(t.falseExpr)}`;return r>-1?`(${n})`:n}default:throw new Error(`Unknown expression type: ${e.type}`)}}var bt=class{parsed;constructor(e){let r=he(e,{lstrip_blocks:!0,trim_blocks:!0});this.parsed=ve(r)}render(e){let r=new P;if(ut(r),e)for(let[a,s]of Object.entries(e))r.set(a,s);return new ge(r).run(this.parsed).value}format(e){return wt(this.parsed,e?.indent||" ")}};return Be(dt);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-codes/browser-compilers",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.3",
|
|
4
4
|
"description": "Compilers that run in the browser, for use in livecodes.io",
|
|
5
5
|
"author": "Hatem Hosny",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
|
|
29
29
|
"@esbuild-plugins/node-modules-polyfill": "0.2.2",
|
|
30
30
|
"@fullhuman/postcss-purgecss": "7.0.2",
|
|
31
|
+
"@huggingface/jinja": "0.5.0",
|
|
31
32
|
"@mdx-js/mdx": "3.1.0",
|
|
32
33
|
"@prettier/plugin-pug": "3.3.0",
|
|
33
34
|
"@tailwindcss/aspect-ratio": "0.4.2",
|
|
@@ -59,7 +60,7 @@
|
|
|
59
60
|
"@webassemblyjs/wast-refmt": "1.14.1",
|
|
60
61
|
"assemblyscript": "0.27.35",
|
|
61
62
|
"autoprefixer": "10.4.21",
|
|
62
|
-
"babel-plugin-react-compiler": "19.
|
|
63
|
+
"babel-plugin-react-compiler": "19.1.0-rc.1",
|
|
63
64
|
"babel-preset-solid": "1.9.5",
|
|
64
65
|
"codemirror-theme-catppuccin": "0.3.0",
|
|
65
66
|
"cssnano-preset-default": "7.0.6",
|
package/scripts/vendors.js
CHANGED
|
@@ -636,3 +636,11 @@ esbuild
|
|
|
636
636
|
path.resolve(targetDir + '/catppuccin/prism/mocha.css'),
|
|
637
637
|
);
|
|
638
638
|
});
|
|
639
|
+
|
|
640
|
+
// jinja
|
|
641
|
+
esbuild.build({
|
|
642
|
+
...baseOptions,
|
|
643
|
+
entryPoints: ['node_modules/@huggingface/jinja/dist/index.js'],
|
|
644
|
+
outfile: 'dist/jinja/jinja.js',
|
|
645
|
+
globalName: 'Jinja',
|
|
646
|
+
});
|