binja 0.9.1 → 0.9.2
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.
- package/README.md +8 -1
- package/dist/adapters/elysia.js +12 -10
- package/dist/adapters/hono.js +13 -11
- package/dist/ai/index.js +12 -10
- package/dist/cli.js +4 -2
- package/dist/index.js +4 -2
- package/dist/lexer/index.d.ts +10 -0
- package/package.json +1 -1
package/dist/adapters/hono.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var{defineProperty:JO,getOwnPropertyNames:IE,getOwnPropertyDescriptor:ME}=Object,DE=Object.prototype.hasOwnProperty;var fO=new WeakMap,kO=(O)=>{var E=fO.get(O),A;if(E)return E;if(E=JO({},"__esModule",{value:!0}),O&&typeof O==="object"||typeof O==="function")IE(O).map((U)=>!DE.call(E,U)&&JO(E,U,{get:()=>O[U],enumerable:!(A=ME(O,U))||A.enumerable}));return fO.set(O,E),E};var o=(O,E)=>{for(var A in E)JO(O,A,{get:E[A],enumerable:!0,configurable:!0,set:(U)=>E[A]=()=>U})};var W=(O,E)=>()=>(O&&(E=O(O=0)),E);var YO;var XO=W(()=>{YO={and:"AND",or:"OR",not:"NOT",true:"NAME",false:"NAME",True:"NAME",False:"NAME",None:"NAME",none:"NAME",is:"NAME",in:"NAME"}});function j(O,E){return
|
|
3
|
-
`)}function
|
|
2
|
+
var{defineProperty:JO,getOwnPropertyNames:IE,getOwnPropertyDescriptor:ME}=Object,DE=Object.prototype.hasOwnProperty;var fO=new WeakMap,kO=(O)=>{var E=fO.get(O),A;if(E)return E;if(E=JO({},"__esModule",{value:!0}),O&&typeof O==="object"||typeof O==="function")IE(O).map((U)=>!DE.call(E,U)&&JO(E,U,{get:()=>O[U],enumerable:!(A=ME(O,U))||A.enumerable}));return fO.set(O,E),E};var o=(O,E)=>{for(var A in E)JO(O,A,{get:E[A],enumerable:!0,configurable:!0,set:(U)=>E[A]=()=>U})};var W=(O,E)=>()=>(O&&(E=O(O=0)),E);var YO;var XO=W(()=>{YO={and:"AND",or:"OR",not:"NOT",true:"NAME",false:"NAME",True:"NAME",False:"NAME",None:"NAME",none:"NAME",is:"NAME",in:"NAME"}});function j(O,E){return GE?`${gO[O]}${E}${gO.reset}`:E}function yO(O,E,A){let U=[],B=A.templateName?`${A.templateName}:${A.line}:${A.column}`:`line ${A.line}, column ${A.column}`;if(U.push(`${j("red",j("bold",O))}: ${E} at ${j("cyan",B)}`),A.source)U.push(""),U.push(PE(A.source,A.line,A.column));if(A.suggestion)U.push(""),U.push(`${j("yellow","Did you mean")}: ${j("cyan",A.suggestion)}?`);if(A.availableOptions&&A.availableOptions.length>0){U.push("");let Q=A.availableOptions.slice(0,8),J=A.availableOptions.length>8?` ${j("gray",`... and ${A.availableOptions.length-8} more`)}`:"";U.push(`${j("gray","Available")}: ${Q.join(", ")}${J}`)}return U.join(`
|
|
3
|
+
`)}function PE(O,E,A){let U=O.split(`
|
|
4
4
|
`),B=[],Q=Math.max(1,E-2),J=Math.min(U.length,E+1),Z=String(J).length;for(let K=Q;K<=J;K++){let $=U[K-1]||"",Y=String(K).padStart(Z," ");if(K===E){B.push(`${j("red"," \u2192")} ${j("gray",Y)} ${j("dim","\u2502")} ${$}`);let I=" ".repeat(Z+4+Math.max(0,A-1)),D=j("red","^");B.push(`${I}${D}`)}else B.push(` ${j("gray",Y)} ${j("dim","\u2502")} ${j("gray",$)}`)}return B.join(`
|
|
5
|
-
`)}function xO(O,E,A=3){let U=null,B=A+1,Q=O.toLowerCase();for(let J of E){let Z=FE(Q,J.toLowerCase());if(Z<B)B=Z,U=J}return B<=A?U:null}function FE(O,E){if(O.length===0)return E.length;if(E.length===0)return O.length;let A=[];for(let U=0;U<=E.length;U++)A[U]=[U];for(let U=0;U<=O.length;U++)A[0][U]=U;for(let U=1;U<=E.length;U++)for(let B=1;B<=O.length;B++)if(E[U-1]===O[B-1])A[U][B]=A[U-1][B-1];else A[U][B]=Math.min(A[U-1][B-1]+1,A[U][B-1]+1,A[U-1][B]+1);return A[E.length][O.length]}var gO,
|
|
6
|
-
`)this.state.line++,this.state.column=0;this.advance()}throw new N(`Unclosed '${O}' block`,{line:A,column:U,source:this.state.source,suggestion:`Add {% end${O} %} to close the block`})}scanText(){let O=this.state.pos,E=this.state.line,A=this.state.column;while(!this.isAtEnd()){if(this.check(this.variableStart)||this.check(this.blockStart)||this.check(this.commentStart))break;if(this.peek()===`
|
|
7
|
-
`)this.state.line++,this.state.column=0;this.
|
|
5
|
+
`)}function xO(O,E,A=3){let U=null,B=A+1,Q=O.toLowerCase();for(let J of E){let Z=FE(Q,J.toLowerCase());if(Z<B)B=Z,U=J}return B<=A?U:null}function FE(O,E){if(O.length===0)return E.length;if(E.length===0)return O.length;let A=[];for(let U=0;U<=E.length;U++)A[U]=[U];for(let U=0;U<=O.length;U++)A[0][U]=U;for(let U=1;U<=E.length;U++)for(let B=1;B<=O.length;B++)if(E[U-1]===O[B-1])A[U][B]=A[U-1][B-1];else A[U][B]=Math.min(A[U-1][B-1]+1,A[U][B-1]+1,A[U-1][B]+1);return A[E.length][O.length]}var gO,GE,N,a;var y=W(()=>{gO={red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",gray:"\x1B[90m",bold:"\x1B[1m",dim:"\x1B[2m",reset:"\x1B[0m"},GE=process.stdout?.isTTY!==!1;N=class N extends Error{line;column;source;templateName;suggestion;constructor(O,E){let A=yO("TemplateSyntaxError",O,E);super(A);this.name="TemplateSyntaxError",this.line=E.line,this.column=E.column,this.source=E.source,this.templateName=E.templateName,this.suggestion=E.suggestion}};a=class a extends Error{line;column;source;templateName;suggestion;availableOptions;constructor(O,E){let A=yO("TemplateRuntimeError",O,E);super(A);this.name="TemplateRuntimeError",this.line=E.line,this.column=E.column,this.source=E.source,this.templateName=E.templateName,this.suggestion=E.suggestion,this.availableOptions=E.availableOptions}}});class h{state;variableStart;variableEnd;blockStart;blockEnd;commentStart;commentEnd;constructor(O,E={}){this.state={source:O,pos:0,line:1,column:1,tokens:[]},this.variableStart=E.variableStart??"{{",this.variableEnd=E.variableEnd??"}}",this.blockStart=E.blockStart??"{%",this.blockEnd=E.blockEnd??"%}",this.commentStart=E.commentStart??"{#",this.commentEnd=E.commentEnd??"#}"}tokenize(){while(!this.isAtEnd())this.scanToken();return this.addToken("EOF",""),this.state.tokens}scanToken(){if(this.match(this.variableStart)){this.addToken("VARIABLE_START",this.variableStart),this.scanExpression(this.variableEnd,"VARIABLE_END");return}if(this.match(this.blockStart)){let O=this.peek()==="-";if(O)this.advance();let E=this.state.pos;if(this.skipWhitespace(),this.checkWord("raw")||this.checkWord("verbatim")){let A=this.checkWord("raw")?"raw":"verbatim";this.scanRawBlock(A,O);return}this.state.pos=E,this.addToken("BLOCK_START",this.blockStart+(O?"-":"")),this.scanExpression(this.blockEnd,"BLOCK_END");return}if(this.match(this.commentStart)){this.scanComment();return}this.scanText()}checkWord(O){let E=this.state.pos;for(let U=0;U<O.length;U++)if(this.state.source[E+U]?.toLowerCase()!==O[U])return!1;let A=this.state.source[E+O.length];return!A||!this.isAlphaNumeric(A)}scanRawBlock(O,E){let A=this.state.line,U=this.state.column;for(let J=0;J<O.length;J++)this.advance();if(this.skipWhitespace(),this.peek()==="-")this.advance();if(!this.match(this.blockEnd))throw new N(`Expected '${this.blockEnd}' after '${O}'`,{line:this.state.line,column:this.state.column,source:this.state.source});let B=`end${O}`,Q=this.state.pos;while(!this.isAtEnd()){if(this.check(this.blockStart)){let J=this.state.pos,Z=this.state.line,K=this.state.column;if(this.match(this.blockStart),this.peek()==="-")this.advance();if(this.skipWhitespace(),this.checkWord(B)){let $=this.state.source.slice(Q,J);if($.length>0)this.state.tokens.push({type:"TEXT",value:$,line:A,column:U});for(let Y=0;Y<B.length;Y++)this.advance();if(this.skipWhitespace(),this.peek()==="-")this.advance();if(!this.match(this.blockEnd))throw new N(`Expected '${this.blockEnd}' after '${B}'`,{line:this.state.line,column:this.state.column,source:this.state.source});return}this.state.pos=J,this.state.line=Z,this.state.column=K}if(this.peek()===`
|
|
6
|
+
`)this.state.line++,this.state.column=0;this.advance()}throw new N(`Unclosed '${O}' block`,{line:A,column:U,source:this.state.source,suggestion:`Add {% end${O} %} to close the block`})}scanText(){let O=this.state.pos,E=this.state.line,A=this.state.column,U=this.state.source;while(!this.isAtEnd()){let B=U.indexOf("{",this.state.pos);if(B===-1){this.advanceToEnd();break}if(B>this.state.pos)this.advanceTo(B);if(this.check(this.variableStart)||this.check(this.blockStart)||this.check(this.commentStart))break;if(this.peek()===`
|
|
7
|
+
`)this.state.line++,this.state.column=0;this.state.pos++,this.state.column++}if(this.state.pos>O){let B=U.slice(O,this.state.pos);this.state.tokens.push({type:"TEXT",value:B,line:E,column:A})}}advanceTo(O){let E=this.state.source;while(this.state.pos<O){if(E[this.state.pos]===`
|
|
8
|
+
`)this.state.line++,this.state.column=0;this.state.pos++,this.state.column++}}advanceToEnd(){let O=this.state.source,E=O.length;while(this.state.pos<E){if(O[this.state.pos]===`
|
|
9
|
+
`)this.state.line++,this.state.column=0;this.state.pos++,this.state.column++}}scanExpression(O,E){this.skipWhitespace();while(!this.isAtEnd()){if(this.skipWhitespace(),this.peek()==="-"&&this.check(O,1))this.advance();if(this.match(O)){this.addToken(E,O);return}this.scanExpressionToken()}throw new N("Unclosed template tag",{line:this.state.line,column:this.state.column,source:this.state.source,suggestion:`Add closing delimiter '${O}'`})}scanExpressionToken(){if(this.skipWhitespace(),this.isAtEnd())return;let O=this.peek();if(O==='"'||O==="'"){this.scanString(O);return}if(this.isDigit(O)){this.scanNumber();return}if(this.isAlpha(O)||O==="_"){this.scanIdentifier();return}this.scanOperator()}scanString(O){this.advance();let E=this.state.pos;while(!this.isAtEnd()&&this.peek()!==O){if(this.peek()==="\\"&&this.peekNext()===O)this.advance();if(this.peek()===`
|
|
8
10
|
`)this.state.line++,this.state.column=0;this.advance()}if(this.isAtEnd())throw new N("Unterminated string literal",{line:this.state.line,column:this.state.column,source:this.state.source,suggestion:`Add closing quote '${O}'`});let A=this.state.source.slice(E,this.state.pos);this.advance(),this.addToken("STRING",A)}scanNumber(){let O=this.state.pos;while(this.isDigit(this.peek()))this.advance();if(this.peek()==="."&&this.isDigit(this.peekNext())){this.advance();while(this.isDigit(this.peek()))this.advance()}let E=this.state.source.slice(O,this.state.pos);this.addToken("NUMBER",E)}scanIdentifier(){let O=this.state.pos;while(this.isAlphaNumeric(this.peek())||this.peek()==="_")this.advance();let E=this.state.source.slice(O,this.state.pos),A=YO[E]??"NAME";this.addToken(A,E)}scanOperator(){let O=this.advance();switch(O){case".":this.addToken("DOT",O);break;case",":this.addToken("COMMA",O);break;case":":this.addToken("COLON",O);break;case"|":this.addToken("PIPE",O);break;case"(":this.addToken("LPAREN",O);break;case")":this.addToken("RPAREN",O);break;case"[":this.addToken("LBRACKET",O);break;case"]":this.addToken("RBRACKET",O);break;case"{":this.addToken("LBRACE",O);break;case"}":this.addToken("RBRACE",O);break;case"+":this.addToken("ADD",O);break;case"-":this.addToken("SUB",O);break;case"*":this.addToken("MUL",O);break;case"/":this.addToken("DIV",O);break;case"%":this.addToken("MOD",O);break;case"~":this.addToken("TILDE",O);break;case"=":if(this.match("="))this.addToken("EQ","==");else this.addToken("ASSIGN","=");break;case"!":if(this.match("="))this.addToken("NE","!=");else throw new N("Unexpected character '!'",{line:this.state.line,column:this.state.column-1,source:this.state.source,suggestion:"Use '!=' for not-equal comparison or 'not' for negation"});break;case"<":if(this.match("="))this.addToken("LE","<=");else this.addToken("LT","<");break;case">":if(this.match("="))this.addToken("GE",">=");else this.addToken("GT",">");break;case"?":if(this.match("?"))this.addToken("NULLCOALESCE","??");else this.addToken("QUESTION","?");break;default:if(!this.isWhitespace(O))throw new N(`Unexpected character '${O}'`,{line:this.state.line,column:this.state.column-1,source:this.state.source})}}scanComment(){while(!this.isAtEnd()&&!this.check(this.commentEnd)){if(this.peek()===`
|
|
9
11
|
`)this.state.line++,this.state.column=0;this.advance()}if(!this.isAtEnd())this.match(this.commentEnd)}isAtEnd(){return this.state.pos>=this.state.source.length}peek(){if(this.isAtEnd())return"\x00";return this.state.source[this.state.pos]}peekNext(){if(this.state.pos+1>=this.state.source.length)return"\x00";return this.state.source[this.state.pos+1]}advance(){let O=this.state.source[this.state.pos];return this.state.pos++,this.state.column++,O}match(O,E=0){let A=this.state.source,U=this.state.pos+E,B=O.length;if(U+B>A.length)return!1;for(let Q=0;Q<B;Q++)if(A[U+Q]!==O[Q])return!1;if(E===0)this.state.pos+=B,this.state.column+=B;return!0}check(O,E=0){let A=this.state.source,U=this.state.pos+E,B=O.length;if(U+B>A.length)return!1;for(let Q=0;Q<B;Q++)if(A[U+Q]!==O[Q])return!1;return!0}skipWhitespace(){while(!this.isAtEnd()&&this.isWhitespace(this.peek())){if(this.peek()===`
|
|
10
12
|
`)this.state.line++,this.state.column=0;this.advance()}}isWhitespace(O){return O===" "||O==="\t"||O===`
|
|
11
13
|
`||O==="\r"}isDigit(O){let E=O.charCodeAt(0);return E>=48&&E<=57}isAlpha(O){let E=O.charCodeAt(0);return E>=97&&E<=122||E>=65&&E<=90}isAlphaNumeric(O){let E=O.charCodeAt(0);return E>=48&&E<=57||E>=97&&E<=122||E>=65&&E<=90}addToken(O,E){this.state.tokens.push({type:O,value:E,line:this.state.line,column:this.state.column-E.length})}}var x=W(()=>{XO();y();XO()});class b{tokens;current=0;source;constructor(O,E){this.tokens=O,this.source=E}parse(){let O=[];while(!this.isAtEnd()){let E=this.parseStatement();if(E)O.push(E)}return{type:"Template",body:O,line:1,column:1}}parseStatement(){switch(this.peek().type){case"TEXT":return this.parseText();case"VARIABLE_START":return this.parseOutput();case"BLOCK_START":return this.parseBlock();case"EOF":return null;default:return this.advance(),null}}parseText(){let O=this.advance();return{type:"Text",value:O.value,line:O.line,column:O.column}}parseOutput(){let O=this.advance(),E=this.parseExpression();return this.expect("VARIABLE_END"),{type:"Output",expression:E,line:O.line,column:O.column}}parseBlock(){let O=this.advance(),E=this.expect("NAME");switch(E.value){case"if":return this.parseIf(O);case"for":return this.parseFor(O);case"block":return this.parseBlockTag(O);case"extends":return this.parseExtends(O);case"include":return this.parseInclude(O);case"set":return this.parseSet(O);case"with":return this.parseWith(O);case"load":return this.parseLoad(O);case"url":return this.parseUrl(O);case"static":return this.parseStatic(O);case"now":return this.parseNow(O);case"comment":return this.parseComment(O);case"spaceless":case"autoescape":case"verbatim":return this.parseSimpleBlock(O,E.value);case"cycle":return this.parseCycle(O);case"firstof":return this.parseFirstof(O);case"ifchanged":return this.parseIfchanged(O);case"regroup":return this.parseRegroup(O);case"widthratio":return this.parseWidthratio(O);case"lorem":return this.parseLorem(O);case"csrf_token":return this.parseCsrfToken(O);case"debug":return this.parseDebug(O);case"templatetag":return this.parseTemplatetag(O);case"ifequal":return this.parseIfequal(O,!1);case"ifnotequal":return this.parseIfequal(O,!0);default:return this.skipToBlockEnd(),null}}parseIf(O){let E=this.parseExpression();this.expect("BLOCK_END");let A=[],U=[],B=[];while(!this.isAtEnd()){if(this.checkBlockTag("elif")||this.checkBlockTag("else")||this.checkBlockTag("endif"))break;let Q=this.parseStatement();if(Q)A.push(Q)}while(this.checkBlockTag("elif")){this.advance(),this.advance();let Q=this.parseExpression();this.expect("BLOCK_END");let J=[];while(!this.isAtEnd()){if(this.checkBlockTag("elif")||this.checkBlockTag("else")||this.checkBlockTag("endif"))break;let Z=this.parseStatement();if(Z)J.push(Z)}U.push({test:Q,body:J})}if(this.checkBlockTag("else")){this.advance(),this.advance(),this.expect("BLOCK_END");while(!this.isAtEnd()){if(this.checkBlockTag("endif"))break;let Q=this.parseStatement();if(Q)B.push(Q)}}return this.expectBlockTag("endif"),{type:"If",test:E,body:A,elifs:U,else_:B,line:O.line,column:O.column}}parseFor(O){let E,A=this.expect("NAME").value;if(this.check("COMMA")){let K=[A];while(this.match("COMMA"))K.push(this.expect("NAME").value);E=K}else E=A;let U=this.expect("NAME");if(U.value!=="in")throw this.error(`Expected 'in' in for loop, got '${U.value}'`);let B=this.parseExpression(),Q=this.check("NAME")&&this.peek().value==="recursive";if(Q)this.advance();this.expect("BLOCK_END");let J=[],Z=[];while(!this.isAtEnd()){if(this.checkBlockTag("empty")||this.checkBlockTag("else")||this.checkBlockTag("endfor"))break;let K=this.parseStatement();if(K)J.push(K)}if(this.checkBlockTag("empty")||this.checkBlockTag("else")){this.advance(),this.advance(),this.expect("BLOCK_END");while(!this.isAtEnd()){if(this.checkBlockTag("endfor"))break;let K=this.parseStatement();if(K)Z.push(K)}}return this.expectBlockTag("endfor"),{type:"For",target:E,iter:B,body:J,else_:Z,recursive:Q,line:O.line,column:O.column}}parseBlockTag(O){let E=this.expect("NAME").value,A=this.check("NAME")&&this.peek().value==="scoped";if(A)this.advance();this.expect("BLOCK_END");let U=[];while(!this.isAtEnd()){if(this.checkBlockTag("endblock"))break;let B=this.parseStatement();if(B)U.push(B)}if(this.advance(),this.advance(),this.check("NAME"))this.advance();return this.expect("BLOCK_END"),{type:"Block",name:E,body:U,scoped:A,line:O.line,column:O.column}}parseExtends(O){let E=this.parseExpression();return this.expect("BLOCK_END"),{type:"Extends",template:E,line:O.line,column:O.column}}parseInclude(O){let E=this.parseExpression(),A=null,U=!1,B=!1;while(this.check("NAME")){let Q=this.peek().value;if(Q==="ignore"&&this.peekNext()?.value==="missing")this.advance(),this.advance(),B=!0;else if(Q==="with")this.advance(),A=this.parseKeywordArgs();else if(Q==="only")this.advance(),U=!0;else if(Q==="without"){if(this.advance(),this.check("NAME")&&this.peek().value==="context")this.advance(),U=!0}else break}return this.expect("BLOCK_END"),{type:"Include",template:E,context:A,only:U,ignoreMissing:B,line:O.line,column:O.column}}parseSet(O){let E=this.expect("NAME").value;this.expect("ASSIGN");let A=this.parseExpression();return this.expect("BLOCK_END"),{type:"Set",target:E,value:A,line:O.line,column:O.column}}parseWith(O){let E=[];do{let U=this.expect("NAME").value;this.expect("ASSIGN");let B=this.parseExpression();E.push({target:U,value:B})}while(this.match("COMMA")||this.check("NAME")&&this.peekNext()?.type==="ASSIGN");this.expect("BLOCK_END");let A=[];while(!this.isAtEnd()){if(this.checkBlockTag("endwith"))break;let U=this.parseStatement();if(U)A.push(U)}return this.expectBlockTag("endwith"),{type:"With",assignments:E,body:A,line:O.line,column:O.column}}parseLoad(O){let E=[];while(this.check("NAME"))E.push(this.advance().value);return this.expect("BLOCK_END"),{type:"Load",names:E,line:O.line,column:O.column}}parseUrl(O){let E=this.parseExpression(),A=[],U={},B=null;while(!this.check("BLOCK_END")){if(this.check("NAME")&&this.peek().value==="as"){this.advance(),B=this.expect("NAME").value;break}if(this.check("NAME")&&this.peekNext()?.type==="ASSIGN"){let Q=this.advance().value;this.advance(),U[Q]=this.parseExpression()}else A.push(this.parseExpression())}return this.expect("BLOCK_END"),{type:"Url",name:E,args:A,kwargs:U,asVar:B,line:O.line,column:O.column}}parseStatic(O){let E=this.parseExpression(),A=null;if(this.check("NAME")&&this.peek().value==="as")this.advance(),A=this.expect("NAME").value;return this.expect("BLOCK_END"),{type:"Static",path:E,asVar:A,line:O.line,column:O.column}}parseNow(O){let E=this.parseExpression(),A=null;if(this.check("NAME")&&this.peek().value==="as")this.advance(),A=this.expect("NAME").value;return this.expect("BLOCK_END"),{type:"Now",format:E,asVar:A,line:O.line,column:O.column}}parseComment(O){this.expect("BLOCK_END");while(!this.isAtEnd()){if(this.checkBlockTag("endcomment"))break;this.advance()}return this.expectBlockTag("endcomment"),null}parseSimpleBlock(O,E){this.skipToBlockEnd();let A=`end${E}`;while(!this.isAtEnd()){if(this.checkBlockTag(A))break;this.advance()}if(this.checkBlockTag(A))this.advance(),this.advance(),this.expect("BLOCK_END");return null}parseCycle(O){let E=[],A=null,U=!1;while(!this.check("BLOCK_END")){if(this.check("NAME")&&this.peek().value==="as"){if(this.advance(),A=this.expect("NAME").value,this.check("NAME")&&this.peek().value==="silent")this.advance(),U=!0;break}E.push(this.parseExpression())}return this.expect("BLOCK_END"),{type:"Cycle",values:E,asVar:A,silent:U,line:O.line,column:O.column}}parseFirstof(O){let E=[],A=null,U=null;while(!this.check("BLOCK_END")){if(this.check("NAME")&&this.peek().value==="as"){this.advance(),U=this.expect("NAME").value;break}E.push(this.parseExpression())}if(E.length>0){let B=E[E.length-1];if(B.type==="Literal"&&typeof B.value==="string")A=E.pop()}return this.expect("BLOCK_END"),{type:"Firstof",values:E,fallback:A,asVar:U,line:O.line,column:O.column}}parseIfchanged(O){let E=[];while(!this.check("BLOCK_END"))E.push(this.parseExpression());this.expect("BLOCK_END");let A=[],U=[];while(!this.isAtEnd()){if(this.checkBlockTag("else")||this.checkBlockTag("endifchanged"))break;let B=this.parseStatement();if(B)A.push(B)}if(this.checkBlockTag("else")){this.advance(),this.advance(),this.expect("BLOCK_END");while(!this.isAtEnd()){if(this.checkBlockTag("endifchanged"))break;let B=this.parseStatement();if(B)U.push(B)}}return this.expectBlockTag("endifchanged"),{type:"Ifchanged",values:E,body:A,else_:U,line:O.line,column:O.column}}parseRegroup(O){let E=this.parseExpression();this.expectName("by");let A=this.expect("NAME").value;this.expectName("as");let U=this.expect("NAME").value;return this.expect("BLOCK_END"),{type:"Regroup",target:E,key:A,asVar:U,line:O.line,column:O.column}}parseWidthratio(O){let E=this.parseExpression(),A=this.parseExpression(),U=this.parseExpression(),B=null;if(this.check("NAME")&&this.peek().value==="as")this.advance(),B=this.expect("NAME").value;return this.expect("BLOCK_END"),{type:"Widthratio",value:E,maxValue:A,maxWidth:U,asVar:B,line:O.line,column:O.column}}parseLorem(O){let E=null,A="p",U=!1;if(this.check("NUMBER"))E={type:"Literal",value:parseInt(this.advance().value,10),line:O.line,column:O.column};if(this.check("NAME")){let B=this.peek().value.toLowerCase();if(B==="w"||B==="p"||B==="b")A=B,this.advance()}if(this.check("NAME")&&this.peek().value==="random")U=!0,this.advance();return this.expect("BLOCK_END"),{type:"Lorem",count:E,method:A,random:U,line:O.line,column:O.column}}parseCsrfToken(O){return this.expect("BLOCK_END"),{type:"CsrfToken",line:O.line,column:O.column}}parseDebug(O){return this.expect("BLOCK_END"),{type:"Debug",line:O.line,column:O.column}}parseTemplatetag(O){let E=this.expect("NAME").value;return this.expect("BLOCK_END"),{type:"Templatetag",tagType:E,line:O.line,column:O.column}}parseIfequal(O,E){let A=this.parseExpression(),U=this.parseExpression();this.expect("BLOCK_END");let B={type:"Compare",left:A,ops:[{operator:E?"!=":"==",right:U}],line:O.line,column:O.column},Q=[],J=[],Z=E?"endifnotequal":"endifequal";while(!this.isAtEnd()){if(this.checkBlockTag("else")||this.checkBlockTag(Z))break;let K=this.parseStatement();if(K)Q.push(K)}if(this.checkBlockTag("else")){this.advance(),this.advance(),this.expect("BLOCK_END");while(!this.isAtEnd()){if(this.checkBlockTag(Z))break;let K=this.parseStatement();if(K)J.push(K)}}return this.expectBlockTag(Z),{type:"If",test:B,body:Q,elifs:[],else_:J,line:O.line,column:O.column}}parseExpression(){return this.parseConditional()}parseConditional(){let O=this.parseOr();if(this.check("NAME")&&this.peek().value==="if"){this.advance();let E=this.parseOr();this.expectName("else");let A=this.parseConditional();O={type:"Conditional",test:E,trueExpr:O,falseExpr:A,line:O.line,column:O.column}}return O}parseOr(){let O=this.parseAnd();while(this.check("OR")||this.check("NAME")&&this.peek().value==="or"){this.advance();let E=this.parseAnd();O={type:"BinaryOp",operator:"or",left:O,right:E,line:O.line,column:O.column}}return O}parseAnd(){let O=this.parseNot();while(this.check("AND")||this.check("NAME")&&this.peek().value==="and"){this.advance();let E=this.parseNot();O={type:"BinaryOp",operator:"and",left:O,right:E,line:O.line,column:O.column}}return O}parseNot(){if(this.check("NOT")||this.check("NAME")&&this.peek().value==="not"){let O=this.advance();return{type:"UnaryOp",operator:"not",operand:this.parseNot(),line:O.line,column:O.column}}return this.parseCompare()}parseCompare(){let O=this.parseAddSub(),E=[];while(!0){let A=null;if(this.match("EQ"))A="==";else if(this.match("NE"))A="!=";else if(this.match("LT"))A="<";else if(this.match("GT"))A=">";else if(this.match("LE"))A="<=";else if(this.match("GE"))A=">=";else if(this.check("NAME")){let B=this.peek().value;if(B==="in")this.advance(),A="in";else if(B==="not"&&this.peekNext()?.value==="in")this.advance(),this.advance(),A="not in";else if(B==="is"){this.advance();let Q=this.check("NOT");if(Q)this.advance();let Z=this.expect("NAME").value,K=[];if(this.match("LPAREN")){while(!this.check("RPAREN"))if(K.push(this.parseExpression()),!this.check("RPAREN"))this.expect("COMMA");this.expect("RPAREN")}O={type:"TestExpr",node:O,test:Z,args:K,negated:Q,line:O.line,column:O.column};continue}}if(!A)break;let U=this.parseAddSub();E.push({operator:A,right:U})}if(E.length===0)return O;return{type:"Compare",left:O,ops:E,line:O.line,column:O.column}}parseAddSub(){let O=this.parseMulDiv();while(this.check("ADD")||this.check("SUB")||this.check("TILDE")){let E=this.advance(),A=this.parseMulDiv();O={type:"BinaryOp",operator:E.value,left:O,right:A,line:O.line,column:O.column}}return O}parseMulDiv(){let O=this.parseUnary();while(this.check("MUL")||this.check("DIV")||this.check("MOD")){let E=this.advance(),A=this.parseUnary();O={type:"BinaryOp",operator:E.value,left:O,right:A,line:O.line,column:O.column}}return O}parseUnary(){if(this.check("SUB")||this.check("ADD")){let O=this.advance(),E=this.parseUnary();return{type:"UnaryOp",operator:O.value,operand:E,line:O.line,column:O.column}}return this.parseFilter()}parseFilter(){let O=this.parsePostfix();while(this.match("PIPE")){let E=this.expect("NAME").value,A=[],U={};if(this.match("COLON"))if(this.check("SUB")||this.check("ADD")){let B=this.advance(),Q=this.parsePostfix();A.push({type:"UnaryOp",operator:B.value,operand:Q,line:B.line,column:B.column})}else A.push(this.parsePostfix());else if(this.match("LPAREN")){while(!this.check("RPAREN")){if(this.check("NAME")&&this.peekNext()?.type==="ASSIGN"){let B=this.advance().value;this.advance(),U[B]=this.parseExpression()}else A.push(this.parseExpression());if(!this.check("RPAREN"))this.expect("COMMA")}this.expect("RPAREN")}O={type:"FilterExpr",node:O,filter:E,args:A,kwargs:U,line:O.line,column:O.column}}return O}parsePostfix(){let O=this.parsePrimary();while(!0)if(this.match("DOT")){let E;if(this.check("NUMBER"))E=this.advance().value;else E=this.expect("NAME").value;O={type:"GetAttr",object:O,attribute:E,line:O.line,column:O.column}}else if(this.match("LBRACKET")){let E=this.parseExpression();this.expect("RBRACKET"),O={type:"GetItem",object:O,index:E,line:O.line,column:O.column}}else if(this.match("LPAREN")){let E=[],A={};while(!this.check("RPAREN")){if(this.check("NAME")&&this.peekNext()?.type==="ASSIGN"){let U=this.advance().value;this.advance(),A[U]=this.parseExpression()}else E.push(this.parseExpression());if(!this.check("RPAREN"))this.expect("COMMA")}this.expect("RPAREN"),O={type:"FunctionCall",callee:O,args:E,kwargs:A,line:O.line,column:O.column}}else break;return O}parsePrimary(){let O=this.peek();if(this.match("STRING"))return{type:"Literal",value:O.value,line:O.line,column:O.column};if(this.match("NUMBER"))return{type:"Literal",value:O.value.includes(".")?parseFloat(O.value):parseInt(O.value,10),line:O.line,column:O.column};if(this.check("NAME")){let E=this.advance().value;if(E==="true"||E==="True")return{type:"Literal",value:!0,line:O.line,column:O.column};if(E==="false"||E==="False")return{type:"Literal",value:!1,line:O.line,column:O.column};if(E==="none"||E==="None"||E==="null")return{type:"Literal",value:null,line:O.line,column:O.column};return{type:"Name",name:E,line:O.line,column:O.column}}if(this.match("LPAREN")){let E=this.parseExpression();return this.expect("RPAREN"),E}if(this.match("LBRACKET")){let E=[];while(!this.check("RBRACKET"))if(E.push(this.parseExpression()),!this.check("RBRACKET"))this.expect("COMMA");return this.expect("RBRACKET"),{type:"Array",elements:E,line:O.line,column:O.column}}if(this.match("LBRACE")){let E=[];while(!this.check("RBRACE")){let A=this.parseExpression();this.expect("COLON");let U=this.parseExpression();if(E.push({key:A,value:U}),!this.check("RBRACE"))this.expect("COMMA")}return this.expect("RBRACE"),{type:"Object",pairs:E,line:O.line,column:O.column}}throw this.error(`Unexpected token: ${O.type} (${O.value})`)}parseKeywordArgs(){let O={};while(this.check("NAME")&&this.peekNext()?.type==="ASSIGN"){let E=this.advance().value;this.advance(),O[E]=this.parseExpression()}return O}checkBlockTag(O){if(this.peek().type!=="BLOCK_START")return!1;let E=this.current+1;if(E>=this.tokens.length)return!1;let A=this.tokens[E];return A.type==="NAME"&&A.value===O}expectBlockTag(O){this.advance();let E=this.expect("NAME");if(E.value!==O)throw this.error(`Expected '${O}', got '${E.value}'`);this.expect("BLOCK_END")}expectName(O){let E=this.expect("NAME");if(E.value!==O)throw this.error(`Expected '${O}', got '${E.value}'`)}skipToBlockEnd(){while(!this.isAtEnd()&&!this.check("BLOCK_END"))this.advance();if(this.check("BLOCK_END"))this.advance()}isAtEnd(){return this.peek().type==="EOF"}peek(){return this.tokens[this.current]}peekNext(){if(this.current+1>=this.tokens.length)return null;return this.tokens[this.current+1]}advance(){if(!this.isAtEnd())this.current++;return this.tokens[this.current-1]}check(O){if(this.isAtEnd())return!1;return this.peek().type===O}match(O){if(this.check(O))return this.advance(),!0;return!1}expect(O){if(this.check(O))return this.advance();let E=this.peek();throw this.error(`Expected ${O}, got ${E.type} (${E.value})`)}error(O){let E=this.peek();return new N(O,{line:E.line,column:E.column,source:this.source})}}var e=W(()=>{x();y()});function zE(O,E,A,U,B){let Q=O.length,J=Q-E,Z={_items:O,_idx:E,counter:E+1,counter0:E,first:E===0,last:E===Q-1,length:Q,index:E+1,index0:E,depth:A,depth0:A-1,revcounter:J,revcounter0:J-1,revindex:J,revindex0:J-1,get previtem(){return this._idx>0?this._items[this._idx-1]:void 0},get nextitem(){return this._idx<this._items.length-1?this._items[this._idx+1]:void 0},cycle(...K){return K[this._idx%K.length]},changed:(K)=>{let $=K!==U.value;return U.value=K,$}};if(B)Z.parentloop=B;return Z}class S{scopes=[];parent=null;_forloopStack=[];_lastCycleValue={value:null};_currentForloop=null;_currentScope;constructor(O={},E=null){this.parent=E,this._currentScope={...O},this.scopes.push(this._currentScope)}get(O){if(O==="forloop"||O==="loop")return this._currentForloop;for(let E=this.scopes.length-1;E>=0;E--){let A=this.scopes[E];if(O in A)return A[O]}return this.parent?this.parent.get(O):void 0}set(O,E){this._currentScope[O]=E}has(O){for(let E=this.scopes.length-1;E>=0;E--)if(O in this.scopes[E])return!0;return this.parent?this.parent.has(O):!1}push(O={}){this._currentScope={...O},this.scopes.push(this._currentScope)}pop(){if(this.scopes.length>1)this.scopes.pop(),this._currentScope=this.scopes[this.scopes.length-1]}derived(O={}){return new S(O,this)}pushForLoop(O,E){let A=this._forloopStack.length+1,U=this._forloopStack.length>0?this._forloopStack[this._forloopStack.length-1]:void 0,B=zE(O,E,A,this._lastCycleValue,U);return this._forloopStack.push(B),this._currentForloop=B,B}popForLoop(){this._forloopStack.pop(),this._currentForloop=this._forloopStack.length>0?this._forloopStack[this._forloopStack.length-1]:null}updateForLoop(O,E){let A=this._currentForloop;if(!A)return;let U=E.length;if(A._idx=O,A._items!==E)A._items=E;A.counter=O+1,A.counter0=O,A.index=O+1,A.index0=O,A.first=O===0,A.last=O===U-1;let B=U-O;A.revcounter=B,A.revcounter0=B-1,A.revindex=B,A.revindex0=B-1}toObject(){let O={};if(this.parent)Object.assign(O,this.parent.toObject());for(let E of this.scopes)Object.assign(O,E);return O}}var RE,WE,_E,jE,NE,pO,HE,CE,cO,sO,SE,wE,VE,LE,qE,hE=(O)=>String(O).toUpperCase(),bE=(O)=>String(O).toLowerCase(),fE=(O)=>{let E=String(O);return E.charAt(0).toUpperCase()+E.slice(1).toLowerCase()},kE=(O)=>{let E=String(O);return E.charAt(0).toUpperCase()+E.slice(1)},gE=(O)=>String(O).replace(RE,(E)=>E.toUpperCase()),yE=(O)=>String(O).trim(),xE=(O)=>String(O).replace(WE,""),TO=(O)=>{if(O?.__safe__)return O;let E=Bun.escapeHTML(String(O)),A=new String(E);return A.__safe__=!0,A},TE=(O)=>{let E=new String(O);return E.__safe__=!0,E},mE=(O)=>JSON.stringify(String(O)).slice(1,-1),vE=(O)=>{let A=String(O).split(CE),U="";for(let Q=0;Q<A.length;Q++){if(Q>0)U+=`
|
|
12
|
-
`;U+=`<p>${A[Q].replace(cO,"<br>")}</p>`}let B=new String(U);return B.__safe__=!0,B},pE=(O)=>{let E=String(O).replace(cO,"<br>"),A=new String(E);return A.__safe__=!0,A},cE=(O,E=30)=>{let A=String(O);if(A.length<=E)return A;return A.slice(0,E-3)+"..."},sE=(O,E=15)=>{let A=String(O).split(sO);if(A.length<=E)return O;return A.slice(0,E).join(" ")+"..."},iE=(O)=>String(O).split(sO).filter(Boolean).length,dE=(O,E=80)=>{let A=String(O),U=Math.max(0,E-A.length),B=Math.floor(U/2),Q=U-B;return" ".repeat(B)+A+" ".repeat(Q)},uE=(O,E=80)=>String(O).padEnd(E),rE=(O,E=80)=>String(O).padStart(E),lE=(O,E="")=>String(O).split(E).join(""),nE=(O)=>String(O).toLowerCase().replace(_E,"").replace(jE,"-").replace(NE,""),oE=(O)=>Math.abs(Number(O)),aE=(O,E=0)=>Number(Number(O).toFixed(E)),tE=(O)=>parseInt(String(O),10)||0,eE=(O)=>parseFloat(String(O))||0,OA=(O,E=-1)=>{let A=parseFloat(String(O));if(isNaN(A))return"";if(E===-1){let U=A.toFixed(1);return U.endsWith(".0")?Math.round(A).toString():U}return A.toFixed(Math.abs(E))},EA=(O,E)=>{let A=Number(O),U=Number(E);if(!isNaN(A)&&!isNaN(U))return A+U;return String(O)+String(E)},AA=(O,E)=>Number(O)%Number(E)===0,BA=(O)=>{let E=Number(O),A=["bytes","KB","MB","GB","TB","PB"],U=0,B=E;while(B>=1024&&U<A.length-1)B/=1024,U++;return`${B.toFixed(1)} ${A[U]}`},iO=(O)=>{if(O==null)return 0;if(typeof O==="string"||Array.isArray(O))return O.length;if(typeof O==="object"){let E=0;for(let A in O)E++;return E}return 0},UA=(O,E)=>iO(O)===Number(E),KA=(O)=>{if(Array.isArray(O))return O[0];if(typeof O==="string")return O[0];return O},QA=(O)=>{if(Array.isArray(O))return O[O.length-1];if(typeof O==="string")return O[O.length-1];return O},$A=(O,E="")=>{if(Array.isArray(O))return O.join(E);return String(O)},ZA=(O,E)=>{if(!O)return O;let[A,U]=String(E).split(":"),B=A?parseInt(A,10):0,Q=U?parseInt(U,10):void 0;if(Array.isArray(O)||typeof O==="string")return O.slice(B,Q);return O},JA=(O)=>{if(Array.isArray(O))return[...O].reverse();if(typeof O==="string")return O.split("").reverse().join("");return O},YA=(O,E=!1)=>{if(!Array.isArray(O))return O;let A=[...O].sort();return E?A.reverse():A},XA=(O)=>{if(!Array.isArray(O))return O;let E=new Set,A=[];for(let U=0;U<O.length;U++){let B=O[U];if(!E.has(B))E.add(B),A.push(B)}return A},IA=(O)=>{if(Array.isArray(O))return O;return String(O).split("")},dO=(O,E)=>{if(!Array.isArray(O))return O;return[...O].sort((A,U)=>{let B=E?A[E]:A,Q=E?U[E]:U;return B<Q?-1:B>Q?1:0})},MA=(O,E)=>{let A=dO(O,E);return Array.isArray(A)?A.reverse():A},DA=(O,E)=>{if(!Array.isArray(O))return[[O]];let A=[],U=Number(E)||2;for(let B=0;B<O.length;B+=U)A.push(O.slice(B,B+U));return A},
|
|
14
|
+
`;U+=`<p>${A[Q].replace(cO,"<br>")}</p>`}let B=new String(U);return B.__safe__=!0,B},pE=(O)=>{let E=String(O).replace(cO,"<br>"),A=new String(E);return A.__safe__=!0,A},cE=(O,E=30)=>{let A=String(O);if(A.length<=E)return A;return A.slice(0,E-3)+"..."},sE=(O,E=15)=>{let A=String(O).split(sO);if(A.length<=E)return O;return A.slice(0,E).join(" ")+"..."},iE=(O)=>String(O).split(sO).filter(Boolean).length,dE=(O,E=80)=>{let A=String(O),U=Math.max(0,E-A.length),B=Math.floor(U/2),Q=U-B;return" ".repeat(B)+A+" ".repeat(Q)},uE=(O,E=80)=>String(O).padEnd(E),rE=(O,E=80)=>String(O).padStart(E),lE=(O,E="")=>String(O).split(E).join(""),nE=(O)=>String(O).toLowerCase().replace(_E,"").replace(jE,"-").replace(NE,""),oE=(O)=>Math.abs(Number(O)),aE=(O,E=0)=>Number(Number(O).toFixed(E)),tE=(O)=>parseInt(String(O),10)||0,eE=(O)=>parseFloat(String(O))||0,OA=(O,E=-1)=>{let A=parseFloat(String(O));if(isNaN(A))return"";if(E===-1){let U=A.toFixed(1);return U.endsWith(".0")?Math.round(A).toString():U}return A.toFixed(Math.abs(E))},EA=(O,E)=>{let A=Number(O),U=Number(E);if(!isNaN(A)&&!isNaN(U))return A+U;return String(O)+String(E)},AA=(O,E)=>Number(O)%Number(E)===0,BA=(O)=>{let E=Number(O),A=["bytes","KB","MB","GB","TB","PB"],U=0,B=E;while(B>=1024&&U<A.length-1)B/=1024,U++;return`${B.toFixed(1)} ${A[U]}`},iO=(O)=>{if(O==null)return 0;if(typeof O==="string"||Array.isArray(O))return O.length;if(typeof O==="object"){let E=0;for(let A in O)E++;return E}return 0},UA=(O,E)=>iO(O)===Number(E),KA=(O)=>{if(Array.isArray(O))return O[0];if(typeof O==="string")return O[0];return O},QA=(O)=>{if(Array.isArray(O))return O[O.length-1];if(typeof O==="string")return O[O.length-1];return O},$A=(O,E="")=>{if(Array.isArray(O))return O.join(E);return String(O)},ZA=(O,E)=>{if(!O)return O;let[A,U]=String(E).split(":"),B=A?parseInt(A,10):0,Q=U?parseInt(U,10):void 0;if(Array.isArray(O)||typeof O==="string")return O.slice(B,Q);return O},JA=(O)=>{if(Array.isArray(O))return[...O].reverse();if(typeof O==="string")return O.split("").reverse().join("");return O},YA=(O,E=!1)=>{if(!Array.isArray(O))return O;let A=[...O].sort();return E?A.reverse():A},XA=(O)=>{if(!Array.isArray(O))return O;let E=new Set,A=[];for(let U=0;U<O.length;U++){let B=O[U];if(!E.has(B))E.add(B),A.push(B)}return A},IA=(O)=>{if(Array.isArray(O))return O;return String(O).split("")},dO=(O,E)=>{if(!Array.isArray(O))return O;return[...O].sort((A,U)=>{let B=E?A[E]:A,Q=E?U[E]:U;return B<Q?-1:B>Q?1:0})},MA=(O,E)=>{let A=dO(O,E);return Array.isArray(A)?A.reverse():A},DA=(O,E)=>{if(!Array.isArray(O))return[[O]];let A=[],U=Number(E)||2;for(let B=0;B<O.length;B+=U)A.push(O.slice(B,B+U));return A},GA=(O,E)=>{switch(E){case"d":return String(O.getDate()).padStart(2,"0");case"j":return String(O.getDate());case"D":return SE[O.getDay()];case"l":return wE[O.getDay()];case"m":return String(O.getMonth()+1).padStart(2,"0");case"n":return String(O.getMonth()+1);case"M":return VE[O.getMonth()];case"F":return LE[O.getMonth()];case"N":return qE[O.getMonth()];case"y":return String(O.getFullYear()).slice(-2);case"Y":return String(O.getFullYear());case"H":return String(O.getHours()).padStart(2,"0");case"G":return String(O.getHours());case"i":return String(O.getMinutes()).padStart(2,"0");case"s":return String(O.getSeconds()).padStart(2,"0");case"a":return O.getHours()<12?"a.m.":"p.m.";case"A":return O.getHours()<12?"AM":"PM";case"g":return String(O.getHours()%12||12);case"h":return String(O.getHours()%12||12).padStart(2,"0");default:return E}},uO=(O,E="N j, Y")=>{let A=O instanceof Date?O:new Date(O);if(isNaN(A.getTime()))return"";return E.replace(HE,(U)=>GA(A,U))},PA=(O,E="H:i")=>uO(O,E),FA=(O,E=new Date)=>{let A=O instanceof Date?O:new Date(O),U=(new Date(E).getTime()-A.getTime())/1000,B=[[31536000,"year","years"],[2592000,"month","months"],[604800,"week","weeks"],[86400,"day","days"],[3600,"hour","hours"],[60,"minute","minutes"]];for(let[Q,J,Z]of B){let K=Math.floor(U/Q);if(K>=1)return`${K} ${K===1?J:Z}`}return"just now"},zA=(O,E=new Date)=>{let U=((O instanceof Date?O:new Date(O)).getTime()-new Date(E).getTime())/1000,B=[[31536000,"year","years"],[2592000,"month","months"],[604800,"week","weeks"],[86400,"day","days"],[3600,"hour","hours"],[60,"minute","minutes"]];for(let[Q,J,Z]of B){let K=Math.floor(U/Q);if(K>=1)return`${K} ${K===1?J:Z}`}return"now"},mO=(O,E="")=>{if(O===void 0||O===null||O===""||O===!1)return E;return O},RA=(O,E="")=>O===null||O===void 0?E:O,WA=(O,E="yes,no,maybe")=>{let[A,U,B]=E.split(",");if(O===!0)return A;if(O===!1)return U;return B??U},_A=(O,E="s")=>{let[A,U]=E.includes(",")?E.split(","):["",E];return Number(O)===1?A:U},jA=(O)=>encodeURIComponent(String(O)),NA=(O)=>{let E=String(O).replace(pO,'<a href="$1">$1</a>'),A=new String(E);return A.__safe__=!0,A},vO=(O,E)=>{try{let A=JSON.stringify(O,null,E),U=new String(A);return U.__safe__=!0,U}catch{return""}},HA=(O)=>{if(Array.isArray(O))return O[Math.floor(Math.random()*O.length)];return O},CA=(O,E,A=null)=>{if(!Array.isArray(O))return[[O]];let U=[],B=Number(E)||1;for(let Q=0;Q<O.length;Q+=B){let J=O.slice(Q,Q+B);while(A!==null&&J.length<B)J.push(A);U.push(J)}return U},SA=(O,E)=>{if(!Array.isArray(O))return[];let A={};for(let B of O){let Q=String(E?B[E]:B);if(!(Q in A))A[Q]=[];A[Q].push(B)}let U=[];for(let B in A)U.push({grouper:B,list:A[B]});return U},wA=(O,E=79,A=!0,U=`
|
|
13
15
|
`)=>{let B=String(O);if(B.length<=E)return B;let Q=B.split(" "),J=[],Z="";for(let K of Q)if(Z.length+K.length+1<=E)Z+=(Z?" ":"")+K;else{if(Z)J.push(Z);if(A&&K.length>E){let $=K;while($.length>E)J.push($.slice(0,E)),$=$.slice(E);Z=$}else Z=K}if(Z)J.push(Z);return J.join(U)},VA=(O,E=4,A=!1,U=!1)=>{let B=String(O),Q=typeof E==="string"?E:" ".repeat(Number(E)),J=B.split(`
|
|
14
16
|
`),Z="";for(let K=0;K<J.length;K++){if(K>0)Z+=`
|
|
15
17
|
`;let $=J[K];if(K===0&&!A)Z+=$;else if(!U&&$.trim()==="")Z+=$;else Z+=Q+$}return Z},LA=(O,E,A,U)=>{let B=String(O),Q=String(E),J=String(A);if(U===void 0||U<0)return B.replaceAll(Q,J);let Z=Number(U);if(Z===0)return B;let K="",$=0,Y=0;while($<B.length&&Y<Z){let X=B.indexOf(Q,$);if(X===-1)break;K+=B.slice($,X)+J,$=X+Q.length,Y++}return K+=B.slice($),K},qA=(O,...E)=>{let A=String(O);for(let U=0;U<E.length;U++){let B=String(E[U]);A=A.replace(/%s/,B);let Q=`%${U+1}`;if(A.includes(Q))A=A.replaceAll(Q,B)}return A},hA=(O)=>String(O),bA=(O)=>{if(Array.isArray(O))return O;if(typeof O==="string")return O.split("");if(O&&typeof O[Symbol.iterator]==="function")return[...O];if(typeof O==="object"&&O!==null)return Object.values(O);return[O]},fA=(O,E)=>{if(!Array.isArray(O))return[];if(typeof E==="string")return O.map((A)=>A?.[E]);return O},kA=(O,E)=>{if(!Array.isArray(O))return[];if(E===void 0)return O.filter((A)=>!!A);return O.filter((A)=>!!A?.[E])},gA=(O,E)=>{if(!Array.isArray(O))return[];if(E===void 0)return O.filter((A)=>!A);return O.filter((A)=>!A?.[E])},rO=(O,E,A,U)=>{if(!Array.isArray(O))return[];return O.filter((B)=>{let Q=B?.[E];if(A===void 0)return!!Q;if(A==="eq"||A==="equalto")return Q===U;if(A==="ne")return Q!==U;if(A==="gt")return Q>U;if(A==="lt")return Q<U;if(A==="ge"||A==="gte")return Q>=U;if(A==="le"||A==="lte")return Q<=U;if(A==="in")return U?.includes?.(Q);if(A==="defined")return Q!==void 0;if(A==="undefined")return Q===void 0;if(A==="none")return Q===null;if(A==="true")return Q===!0;if(A==="false")return Q===!1;return!!Q})},yA=(O,E,A,U)=>{if(!Array.isArray(O))return[];let B=rO(O,E,A,U);return O.filter((Q)=>!B.includes(Q))},xA=(O,E)=>{if(O==null)return;return O[E]},TA=(O,E,A)=>{if(!Array.isArray(O)||O.length===0)return A;if(E){let B=O[0];for(let Q=1;Q<O.length;Q++)if(O[Q][E]>B[E])B=O[Q];return B}let U=O[0];for(let B=1;B<O.length;B++)if(O[B]>U)U=O[B];return U},mA=(O,E,A)=>{if(!Array.isArray(O)||O.length===0)return A;if(E){let B=O[0];for(let Q=1;Q<O.length;Q++)if(O[Q][E]<B[E])B=O[Q];return B}let U=O[0];for(let B=1;B<O.length;B++)if(O[B]<U)U=O[B];return U},vA=(O,E,A=0)=>{if(!Array.isArray(O))return A;let U=Number(A);for(let B=0;B<O.length;B++){let Q=E?O[B][E]:O[B];U+=Number(Q)||0}return U},pA=(O)=>{try{let E=JSON.stringify(O,null,2),A=new String(E);return A.__safe__=!0,A}catch{return String(O)}},cA=(O)=>{let E=Bun.escapeHTML(String(O)),A=new String(E);return A.__safe__=!0,A},sA,iA=(O)=>{let E=String(O).toLowerCase(),A=E.length,U=Array(A);for(let B=0;B<A;B++)U[B]=sA[E[B]]??E[B];return U.join("")},dA=(O)=>{let E=String(O).split(`
|
|
@@ -21,7 +23,7 @@ ${E($,Q+1)}${J}</ul>
|
|
|
21
23
|
${J}<ul>
|
|
22
24
|
${E(B[K+1],Q+1)}${J}</ul>
|
|
23
25
|
${J}`,K++;Z+=`</li>
|
|
24
|
-
`}}return Z},A=E(O),U=new String(A);return U.__safe__=!0,U},rA=(O)=>{let E=String(O).replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/"/g,"\\\""),A=new String(E);return A.__safe__=!0,A},lA=(O,E)=>{let A=parseInt(String(O),10);if(isNaN(A))return O;let U=String(Math.abs(A)),B=Number(E)||1;if(B<1||B>U.length)return O;return parseInt(U[U.length-B],10)},nA=(O)=>{return String(O).replace(/ /g,"%20").replace(/"/g,"%22").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\\/g,"%5C").replace(/\^/g,"%5E").replace(/`/g,"%60").replace(/\{/g,"%7B").replace(/\|/g,"%7C").replace(/\}/g,"%7D")},oA=(O,E)=>{let A=JSON.stringify(O).replace(/</g,"\\u003C").replace(/>/g,"\\u003E").replace(/&/g,"\\u0026"),B=`<script${E?` id="${String(E)}"`:""} type="application/json">${A}</script>`,Q=new String(B);return Q.__safe__=!0,Q},aA=(O)=>{if(!Array.isArray(O))return O;return O.map((E)=>{let A=new String(E);return A.__safe__=!0,A})},tA=(O,E)=>{let A=String(E),U=O;if(A==="s")return String(U);if(A==="d"||A==="i")return String(parseInt(String(U),10)||0);if(A==="f")return String(parseFloat(String(U))||0);if(A==="x")return(parseInt(String(U),10)||0).toString(16);if(A==="X")return(parseInt(String(U),10)||0).toString(16).toUpperCase();if(A==="o")return(parseInt(String(U),10)||0).toString(8);if(A==="b")return(parseInt(String(U),10)||0).toString(2);if(A==="e")return(parseFloat(String(U))||0).toExponential();let B=A.match(/^\.?(\d+)f$/);if(B){let J=parseInt(B[1],10);return(parseFloat(String(U))||0).toFixed(J)}let Q=A.match(/^(\d+)([sd])$/);if(Q){let J=parseInt(Q[1],10),Z=Q[2];return(Z==="d"?String(parseInt(String(U),10)||0):String(U)).padStart(J,Z==="d"?"0":" ")}return String(U)},eA=(O,E=30)=>{let A=String(O),U=Number(E),B="",Q=0,J=!1,Z=[];for(let $=0;$<A.length&&Q<U;$++){let Y=A[$];if(Y==="<"){J=!0;let X=A.slice($).match(/^<\/(\w+)/),I=A.slice($).match(/^<(\w+)/);if(X){let D=X[1].toLowerCase(),M=Z.lastIndexOf(D);if(M!==-1)Z.splice(M,1)}else if(I&&!A.slice($).match(/^<\w+[^>]*\/>/))Z.push(I[1].toLowerCase())}if(B+=Y,Y===">")J=!1;else if(!J)Q++}if(Q>=U&&A.length>B.length)B+="...";for(let $=Z.length-1;$>=0;$--)B+=`</${Z[$]}>`;let K=new String(B);return K.__safe__=!0,K},OB=(O,E=15)=>{let A=String(O),U=Number(E),B="",Q=0,J=!1,Z=!1,K=[];for(let Y=0;Y<A.length&&Q<U;Y++){let X=A[Y];if(X==="<"){J=!0;let I=A.slice(Y).match(/^<\/(\w+)/),D=A.slice(Y).match(/^<(\w+)/);if(I){let M=I[1].toLowerCase(),R=K.lastIndexOf(M);if(R!==-1)K.splice(R,1)}else if(D&&!A.slice(Y).match(/^<\w+[^>]*\/>/))K.push(D[1].toLowerCase())}if(B+=X,X===">")J=!1;else if(!J){let I=/\s/.test(X);if(!I&&!Z)Z=!0;else if(I&&Z)Z=!1,Q++}}if(Z)Q++;if(Q>=U)B=B.trimEnd()+"...";for(let Y=K.length-1;Y>=0;Y--)B+=`</${K[Y]}>`;let $=new String(B);return $.__safe__=!0,$},EB=(O,E=15)=>{let A=Number(E),U=String(O).replace(pO,(Q)=>{let J=Q.length>A?Q.slice(0,A)+"...":Q;return`<a href="${Q}">${J}</a>`}),B=new String(U);return B.__safe__=!0,B},AB=(O)=>{if(O==null||typeof O!=="object")return[];return Object.entries(O)},BB=(O,E=!0)=>{if(O==null||typeof O!=="object")return"";let A=[];for(let[J,Z]of Object.entries(O))if(Z===!0)A.push(J);else if(Z!==!1&&Z!=null){let K=Bun.escapeHTML(String(Z));A.push(`${J}="${K}"`)}let U=A.join(" "),B=E&&U?" "+U:U,Q=new String(B);return Q.__safe__=!0,Q},T;var OO=W(()=>{RE=/\b\w/g,WE=/<[^>]*>/g,_E=/[^\w\s-]/g,jE=/[\s_-]+/g,NE=/^-+|-+$/g,pO=/(https?:\/\/[^\s]+)/g,HE=/[a-zA-Z]/g,CE=/\n\n+/,cO=/\n/g,sO=/\s+/,SE=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wE=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],VE=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],LE=["January","February","March","April","May","June","July","August","September","October","November","December"],qE=["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."],sA={a:"2",b:"2",c:"2",d:"3",e:"3",f:"3",g:"4",h:"4",i:"4",j:"5",k:"5",l:"5",m:"6",n:"6",o:"6",p:"7",q:"7",r:"7",s:"7",t:"8",u:"8",v:"8",w:"9",x:"9",y:"9",z:"9"},T={upper:hE,lower:bE,capitalize:fE,capfirst:kE,title:gE,trim:yE,striptags:xE,escape:TO,e:TO,safe:TE,escapejs:mE,linebreaks:vE,linebreaksbr:pE,truncatechars:cE,truncatewords:sE,wordcount:iE,center:dE,ljust:uE,rjust:rE,cut:lE,slugify:nE,abs:oE,round:aE,int:tE,float:eE,floatformat:OA,add:EA,divisibleby:AA,filesizeformat:BA,length:iO,length_is:UA,first:KA,last:QA,join:$A,slice:ZA,reverse:JA,sort:YA,unique:XA,make_list:IA,dictsort:dO,dictsortreversed:MA,columns:DA,date:uO,time:GA,timesince:FA,timeuntil:zA,default:mO,d:mO,default_if_none:RA,yesno:WA,pluralize:_A,urlencode:jA,urlize:NA,json:vO,tojson:vO,random:HA,batch:CA,groupby:SA,wordwrap:wA,indent:VA,replace:LA,format:qA,string:hA,list:bA,map:fA,select:kA,reject:gA,selectattr:rO,rejectattr:yA,attr:xA,max:TA,min:mA,sum:vA,pprint:pA,forceescape:cA,phone2numeric:iA,linenumbers:dA,unordered_list:uA,addslashes:rA,get_digit:lA,iriencode:nA,json_script:oA,safeseq:aA,stringformat:tA,truncatechars_html:eA,truncatewords_html:OB,urlizetrunc:EB,items:AB,xmlattr:BB}});var UB=(O,E)=>{let A=Number(O),U=Number(E);if(U===0)return!1;return A%U===0},KB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2===0},QB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2!==0},$B=(O)=>{return typeof O==="number"&&!isNaN(O)},ZB=(O)=>{return Number.isInteger(O)},JB=(O)=>{return typeof O==="number"&&!Number.isInteger(O)&&!isNaN(O)},nO=(O,E)=>Number(O)>Number(E),YB=(O,E)=>Number(O)>=Number(E),oO=(O,E)=>Number(O)<Number(E),XB=(O,E)=>Number(O)<=Number(E),IB,MB,DB=(O)=>{return O!==MO},MO=(O)=>{return O===MO},lO=(O)=>{return O===null},PB=(O)=>{return typeof O==="boolean"},GB=(O)=>{return typeof O==="string"},FB=(O)=>{return O!==null&&typeof O==="object"&&!Array.isArray(O)&&!(O instanceof Date)},zB=(O)=>{if(O==null)return!1;return typeof O==="string"||Array.isArray(O)||typeof O[Symbol.iterator]==="function"},RB=(O)=>{return Array.isArray(O)||typeof O==="string"},WB=(O)=>{return typeof O==="function"},_B=(O)=>{if(typeof O!=="string")return!1;return O===O.toLowerCase()&&O!==O.toUpperCase()},jB=(O)=>{if(typeof O!=="string")return!1;return O===O.toUpperCase()&&O!==O.toLowerCase()},NB=(O)=>{if(O==null)return!0;if(typeof O==="string"||Array.isArray(O))return O.length===0;if(typeof O==="object"){for(let E in O)return!1;return!0}return!1},HB=(O,E)=>{if(Array.isArray(E))return E.includes(O);if(typeof E==="string")return E.includes(String(O));if(typeof E==="object"&&E!==null)return O in E;return!1},aO=(O,E)=>O===E,CB=(O,E)=>O!==E,SB=(O,E)=>O===E,wB,tO=(O)=>{if(O==null)return!1;if(typeof O==="boolean")return O;if(typeof O==="number")return O!==0;if(typeof O==="string")return O.length>0;if(Array.isArray(O))return O.length>0;if(typeof O==="object"){for(let E in O)return!0;return!1}return!0},VB=(O)=>!tO(O),LB=(O)=>O===!0,qB=(O)=>O===!1,m;var EO=W(()=>{IB=nO,MB=oO,wB=aO,m={divisibleby:UB,even:KB,odd:QB,number:$B,integer:ZB,float:JB,gt:nO,ge:YB,lt:oO,le:XB,greaterthan:IB,lessthan:MB,defined:DB,undefined:MO,none:lO,None:lO,boolean:PB,string:GB,mapping:FB,iterable:zB,sequence:RB,callable:WB,lower:_B,upper:jB,empty:NB,in:HB,eq:aO,ne:CB,sameas:SB,equalto:wB,truthy:tO,falsy:VB,true:LB,false:qB}});var DO={};o(DO,{Runtime:()=>z,Context:()=>S});var z;var f=W(()=>{OO();EO();y();z=class z{options;filters;tests;blocks=new Map;parentTemplate=null;source;constructor(O={}){if(this.options={autoescape:O.autoescape??!0,filters:O.filters??{},tests:O.tests??{},globals:O.globals??{},urlResolver:O.urlResolver??((E)=>`#${E}`),staticResolver:O.staticResolver??((E)=>`/static/${E}`),templateLoader:O.templateLoader??(async()=>{throw Error("Template loader not configured")}),timezone:O.timezone??void 0},this.filters={...T,...this.options.filters},this.options.timezone){let E=this.options.timezone;this.filters.date=(A,U="N j, Y")=>{let B=A instanceof Date?A:new Date(A);if(isNaN(B.getTime()))return"";return this.formatDate(B,U)},this.filters.time=(A,U="H:i")=>{return this.filters.date(A,U)}}this.tests={...m,...this.options.tests}}async render(O,E={}){let A=new S({...this.options.globals,...E});if(this.blocks.clear(),this.parentTemplate=null,this.templateNeedsAsync(O)){if(await this.collectBlocks(O,A),this.parentTemplate)return this.renderTemplateAsync(this.parentTemplate,A);return this.renderTemplateAsync(O,A)}return this.collectBlocksSync(O),this.renderTemplateSync(O,A)}templateNeedsAsync(O){for(let E of O.body){if(E.type==="Extends"||E.type==="Include")return!0;if(E.type==="If"){let A=E;if(this.nodesNeedAsync(A.body))return!0;for(let U of A.elifs)if(this.nodesNeedAsync(U.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="For"){let A=E;if(this.nodesNeedAsync(A.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="Block"){if(this.nodesNeedAsync(E.body))return!0}if(E.type==="With"){if(this.nodesNeedAsync(E.body))return!0}}return!1}nodesNeedAsync(O){for(let E of O){if(E.type==="Extends"||E.type==="Include")return!0;if(E.type==="If"){let A=E;if(this.nodesNeedAsync(A.body))return!0;for(let U of A.elifs)if(this.nodesNeedAsync(U.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="For"){let A=E;if(this.nodesNeedAsync(A.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="Block"){if(this.nodesNeedAsync(E.body))return!0}if(E.type==="With"){if(this.nodesNeedAsync(E.body))return!0}}return!1}collectBlocksSync(O){for(let E of O.body)if(E.type==="Block")this.blocks.set(E.name,E)}renderTemplateSync(O,E){let A=[];for(let U of O.body){let B=this.renderNodeSync(U,E);if(B!==null)A.push(B)}return A.join("")}renderNodeSync(O,E){if(O.type==="Text")return O.value;if(O.type==="Output")return this.stringify(this.eval(O.expression,E));switch(O.type){case"If":return this.renderIfSync(O,E);case"For":return this.renderForSync(O,E);case"Block":return this.renderBlockSync(O,E);case"Set":return E.set(O.target,this.eval(O.value,E)),"";case"With":return this.renderWithSync(O,E);case"Url":return this.renderUrlSync(O,E);case"Static":return this.renderStaticSync(O,E);case"Now":return this.renderNowSync(O,E);case"Load":case"Extends":return null;case"Cycle":return this.renderCycleSync(O,E);case"Firstof":return this.renderFirstofSync(O,E);case"Ifchanged":return this.renderIfchangedSync(O,E);case"Regroup":return this.renderRegroupSync(O,E);case"Widthratio":return this.renderWidthratioSync(O,E);case"Lorem":return this.renderLoremSync(O,E);case"CsrfToken":return this.renderCsrfTokenSync();case"Debug":return this.renderDebugSync(E);case"Templatetag":return this.renderTemplatetagSync(O);default:return null}}renderIfSync(O,E){if(this.isTruthy(this.eval(O.test,E)))return this.renderNodesSync(O.body,E);for(let A of O.elifs)if(this.isTruthy(this.eval(A.test,E)))return this.renderNodesSync(A.body,E);return O.else_.length>0?this.renderNodesSync(O.else_,E):""}renderForSync(O,E){let A=this.eval(O.iter,E),U=this.toIterable(A),B=U.length;if(B===0)return this.renderNodesSync(O.else_,E);E.push(),E.pushForLoop(U,0);let Q;if(Array.isArray(O.target)){let J=O.target,Z=J.length;if(B<25){Q="";for(let K=0;K<B;K++){let $=U[K];if(K>0)E.updateForLoop(K,U);let Y=Array.isArray($)?$:[$,$];for(let X=0;X<Z;X++)E.set(J[X],Y[X]);Q+=this.renderNodesSync(O.body,E)}}else{let K=Array(B);for(let $=0;$<B;$++){let Y=U[$];if($>0)E.updateForLoop($,U);let X=Array.isArray(Y)?Y:[Y,Y];for(let I=0;I<Z;I++)E.set(J[I],X[I]);K[$]=this.renderNodesSync(O.body,E)}Q=K.join("")}}else{let J=O.target;if(B<25){Q="";for(let Z=0;Z<B;Z++){if(Z>0)E.updateForLoop(Z,U);E.set(J,U[Z]),Q+=this.renderNodesSync(O.body,E)}}else{let Z=Array(B);for(let K=0;K<B;K++){if(K>0)E.updateForLoop(K,U);E.set(J,U[K]),Z[K]=this.renderNodesSync(O.body,E)}Q=Z.join("")}}return E.popForLoop(),E.pop(),Q}renderBlockSync(O,E){let A=this.blocks.get(O.name)||O;E.push();let U=this.renderNodesSync(O.body,E),B=new String(U);B.__safe__=!0,E.set("block",{super:B});let Q=this.renderNodesSync(A.body,E);return E.pop(),Q}renderWithSync(O,E){E.push();for(let{target:U,value:B}of O.assignments)E.set(U,this.eval(B,E));let A=this.renderNodesSync(O.body,E);return E.pop(),A}renderUrlSync(O,E){let A=this.eval(O.name,E),U=[];for(let J=0;J<O.args.length;J++)U.push(this.eval(O.args[J],E));let B=this.evalObjectSync(O.kwargs,E),Q=this.options.urlResolver(String(A),U,B);if(O.asVar)return E.set(O.asVar,Q),"";return Q}renderStaticSync(O,E){let A=this.eval(O.path,E),U=this.options.staticResolver(String(A));if(O.asVar)return E.set(O.asVar,U),"";return U}renderNowSync(O,E){let A=String(this.eval(O.format,E)),U=this.formatDate(new Date,A);if(O.asVar)return E.set(O.asVar,U),"";return U}cycleState=new Map;renderCycleSync(O,E){let A=`cycle_${O.line}_${O.column}`,U=this.cycleState.get(A)??0,B=[];for(let J=0;J<O.values.length;J++)B.push(this.eval(O.values[J],E));let Q=B[U%B.length];if(this.cycleState.set(A,U+1),O.asVar)return E.set(O.asVar,Q),O.silent?"":this.stringify(Q);return this.stringify(Q)}renderFirstofSync(O,E){for(let U of O.values){let B=this.eval(U,E);if(this.isTruthy(B)){if(O.asVar)return E.set(O.asVar,B),"";return this.stringify(B)}}let A=O.fallback?this.eval(O.fallback,E):"";if(O.asVar)return E.set(O.asVar,A),"";return this.stringify(A)}ifchangedState=new Map;renderIfchangedSync(O,E){let A=`ifchanged_${O.line}_${O.column}`,U;if(O.values.length>0){let J=[];for(let Z=0;Z<O.values.length;Z++)J.push(this.eval(O.values[Z],E));U=J}else U=this.renderNodesSync(O.body,E);let B=this.ifchangedState.get(A),Q=!this.deepEqual(U,B);if(this.ifchangedState.set(A,U),Q){if(O.values.length>0)return this.renderNodesSync(O.body,E);return U}else return this.renderNodesSync(O.else_,E)}renderRegroupSync(O,E){let A=this.toIterable(this.eval(O.target,E)),U=[],B=Symbol("initial"),Q=[];for(let J of A){let Z=J&&typeof J==="object"?J[O.key]:void 0;if(Z!==B){if(Q.length>0)U.push({grouper:B,list:Q});B=Z,Q=[J]}else Q.push(J)}if(Q.length>0)U.push({grouper:B,list:Q});return E.set(O.asVar,U),""}renderWidthratioSync(O,E){let A=Number(this.eval(O.value,E)),U=Number(this.eval(O.maxValue,E)),B=Number(this.eval(O.maxWidth,E)),Q=U===0?0:Math.round(A/U*B);if(O.asVar)return E.set(O.asVar,Q),"";return String(Q)}renderLoremSync(O,E){let A=O.count?Number(this.eval(O.count,E)):1,U=O.method,B=["lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit","sed","do","eiusmod","tempor","incididunt","ut","labore","et","dolore","magna","aliqua","enim","ad","minim","veniam","quis","nostrud","exercitation","ullamco","laboris","nisi","aliquip","ex","ea","commodo","consequat","duis","aute","irure","in","reprehenderit","voluptate","velit","esse","cillum","fugiat","nulla","pariatur","excepteur","sint","occaecat","cupidatat","non","proident","sunt","culpa","qui","officia","deserunt","mollit","anim","id","est","laborum"],Q=(J)=>{if(O.random)return B[Math.floor(Math.random()*B.length)];return B[J%B.length]};if(U==="w"){let J=[];for(let Z=0;Z<A;Z++)J.push(Q(Z));return J.join(" ")}else if(U==="p"||U==="b"){let J=[];for(let Z=0;Z<A;Z++){let K=3+Z%3,$=[];for(let Y=0;Y<K;Y++){let X=8+Y%7,I=[];for(let D=0;D<X;D++)I.push(Q(Z*100+Y*20+D));I[0]=I[0].charAt(0).toUpperCase()+I[0].slice(1),$.push(I.join(" ")+".")}J.push($.join(" "))}if(U==="b")return J.join(`
|
|
26
|
+
`}}return Z},A=E(O),U=new String(A);return U.__safe__=!0,U},rA=(O)=>{let E=String(O).replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/"/g,"\\\""),A=new String(E);return A.__safe__=!0,A},lA=(O,E)=>{let A=parseInt(String(O),10);if(isNaN(A))return O;let U=String(Math.abs(A)),B=Number(E)||1;if(B<1||B>U.length)return O;return parseInt(U[U.length-B],10)},nA=(O)=>{return String(O).replace(/ /g,"%20").replace(/"/g,"%22").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\\/g,"%5C").replace(/\^/g,"%5E").replace(/`/g,"%60").replace(/\{/g,"%7B").replace(/\|/g,"%7C").replace(/\}/g,"%7D")},oA=(O,E)=>{let A=JSON.stringify(O).replace(/</g,"\\u003C").replace(/>/g,"\\u003E").replace(/&/g,"\\u0026"),B=`<script${E?` id="${String(E)}"`:""} type="application/json">${A}</script>`,Q=new String(B);return Q.__safe__=!0,Q},aA=(O)=>{if(!Array.isArray(O))return O;return O.map((E)=>{let A=new String(E);return A.__safe__=!0,A})},tA=(O,E)=>{let A=String(E),U=O;if(A==="s")return String(U);if(A==="d"||A==="i")return String(parseInt(String(U),10)||0);if(A==="f")return String(parseFloat(String(U))||0);if(A==="x")return(parseInt(String(U),10)||0).toString(16);if(A==="X")return(parseInt(String(U),10)||0).toString(16).toUpperCase();if(A==="o")return(parseInt(String(U),10)||0).toString(8);if(A==="b")return(parseInt(String(U),10)||0).toString(2);if(A==="e")return(parseFloat(String(U))||0).toExponential();let B=A.match(/^\.?(\d+)f$/);if(B){let J=parseInt(B[1],10);return(parseFloat(String(U))||0).toFixed(J)}let Q=A.match(/^(\d+)([sd])$/);if(Q){let J=parseInt(Q[1],10),Z=Q[2];return(Z==="d"?String(parseInt(String(U),10)||0):String(U)).padStart(J,Z==="d"?"0":" ")}return String(U)},eA=(O,E=30)=>{let A=String(O),U=Number(E),B="",Q=0,J=!1,Z=[];for(let $=0;$<A.length&&Q<U;$++){let Y=A[$];if(Y==="<"){J=!0;let X=A.slice($).match(/^<\/(\w+)/),I=A.slice($).match(/^<(\w+)/);if(X){let D=X[1].toLowerCase(),M=Z.lastIndexOf(D);if(M!==-1)Z.splice(M,1)}else if(I&&!A.slice($).match(/^<\w+[^>]*\/>/))Z.push(I[1].toLowerCase())}if(B+=Y,Y===">")J=!1;else if(!J)Q++}if(Q>=U&&A.length>B.length)B+="...";for(let $=Z.length-1;$>=0;$--)B+=`</${Z[$]}>`;let K=new String(B);return K.__safe__=!0,K},OB=(O,E=15)=>{let A=String(O),U=Number(E),B="",Q=0,J=!1,Z=!1,K=[];for(let Y=0;Y<A.length&&Q<U;Y++){let X=A[Y];if(X==="<"){J=!0;let I=A.slice(Y).match(/^<\/(\w+)/),D=A.slice(Y).match(/^<(\w+)/);if(I){let M=I[1].toLowerCase(),R=K.lastIndexOf(M);if(R!==-1)K.splice(R,1)}else if(D&&!A.slice(Y).match(/^<\w+[^>]*\/>/))K.push(D[1].toLowerCase())}if(B+=X,X===">")J=!1;else if(!J){let I=/\s/.test(X);if(!I&&!Z)Z=!0;else if(I&&Z)Z=!1,Q++}}if(Z)Q++;if(Q>=U)B=B.trimEnd()+"...";for(let Y=K.length-1;Y>=0;Y--)B+=`</${K[Y]}>`;let $=new String(B);return $.__safe__=!0,$},EB=(O,E=15)=>{let A=Number(E),U=String(O).replace(pO,(Q)=>{let J=Q.length>A?Q.slice(0,A)+"...":Q;return`<a href="${Q}">${J}</a>`}),B=new String(U);return B.__safe__=!0,B},AB=(O)=>{if(O==null||typeof O!=="object")return[];return Object.entries(O)},BB=(O,E=!0)=>{if(O==null||typeof O!=="object")return"";let A=[];for(let[J,Z]of Object.entries(O))if(Z===!0)A.push(J);else if(Z!==!1&&Z!=null){let K=Bun.escapeHTML(String(Z));A.push(`${J}="${K}"`)}let U=A.join(" "),B=E&&U?" "+U:U,Q=new String(B);return Q.__safe__=!0,Q},T;var OO=W(()=>{RE=/\b\w/g,WE=/<[^>]*>/g,_E=/[^\w\s-]/g,jE=/[\s_-]+/g,NE=/^-+|-+$/g,pO=/(https?:\/\/[^\s]+)/g,HE=/[a-zA-Z]/g,CE=/\n\n+/,cO=/\n/g,sO=/\s+/,SE=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wE=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],VE=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],LE=["January","February","March","April","May","June","July","August","September","October","November","December"],qE=["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."],sA={a:"2",b:"2",c:"2",d:"3",e:"3",f:"3",g:"4",h:"4",i:"4",j:"5",k:"5",l:"5",m:"6",n:"6",o:"6",p:"7",q:"7",r:"7",s:"7",t:"8",u:"8",v:"8",w:"9",x:"9",y:"9",z:"9"},T={upper:hE,lower:bE,capitalize:fE,capfirst:kE,title:gE,trim:yE,striptags:xE,escape:TO,e:TO,safe:TE,escapejs:mE,linebreaks:vE,linebreaksbr:pE,truncatechars:cE,truncatewords:sE,wordcount:iE,center:dE,ljust:uE,rjust:rE,cut:lE,slugify:nE,abs:oE,round:aE,int:tE,float:eE,floatformat:OA,add:EA,divisibleby:AA,filesizeformat:BA,length:iO,length_is:UA,first:KA,last:QA,join:$A,slice:ZA,reverse:JA,sort:YA,unique:XA,make_list:IA,dictsort:dO,dictsortreversed:MA,columns:DA,date:uO,time:PA,timesince:FA,timeuntil:zA,default:mO,d:mO,default_if_none:RA,yesno:WA,pluralize:_A,urlencode:jA,urlize:NA,json:vO,tojson:vO,random:HA,batch:CA,groupby:SA,wordwrap:wA,indent:VA,replace:LA,format:qA,string:hA,list:bA,map:fA,select:kA,reject:gA,selectattr:rO,rejectattr:yA,attr:xA,max:TA,min:mA,sum:vA,pprint:pA,forceescape:cA,phone2numeric:iA,linenumbers:dA,unordered_list:uA,addslashes:rA,get_digit:lA,iriencode:nA,json_script:oA,safeseq:aA,stringformat:tA,truncatechars_html:eA,truncatewords_html:OB,urlizetrunc:EB,items:AB,xmlattr:BB}});var UB=(O,E)=>{let A=Number(O),U=Number(E);if(U===0)return!1;return A%U===0},KB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2===0},QB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2!==0},$B=(O)=>{return typeof O==="number"&&!isNaN(O)},ZB=(O)=>{return Number.isInteger(O)},JB=(O)=>{return typeof O==="number"&&!Number.isInteger(O)&&!isNaN(O)},nO=(O,E)=>Number(O)>Number(E),YB=(O,E)=>Number(O)>=Number(E),oO=(O,E)=>Number(O)<Number(E),XB=(O,E)=>Number(O)<=Number(E),IB,MB,DB=(O)=>{return O!==MO},MO=(O)=>{return O===MO},lO=(O)=>{return O===null},GB=(O)=>{return typeof O==="boolean"},PB=(O)=>{return typeof O==="string"},FB=(O)=>{return O!==null&&typeof O==="object"&&!Array.isArray(O)&&!(O instanceof Date)},zB=(O)=>{if(O==null)return!1;return typeof O==="string"||Array.isArray(O)||typeof O[Symbol.iterator]==="function"},RB=(O)=>{return Array.isArray(O)||typeof O==="string"},WB=(O)=>{return typeof O==="function"},_B=(O)=>{if(typeof O!=="string")return!1;return O===O.toLowerCase()&&O!==O.toUpperCase()},jB=(O)=>{if(typeof O!=="string")return!1;return O===O.toUpperCase()&&O!==O.toLowerCase()},NB=(O)=>{if(O==null)return!0;if(typeof O==="string"||Array.isArray(O))return O.length===0;if(typeof O==="object"){for(let E in O)return!1;return!0}return!1},HB=(O,E)=>{if(Array.isArray(E))return E.includes(O);if(typeof E==="string")return E.includes(String(O));if(typeof E==="object"&&E!==null)return O in E;return!1},aO=(O,E)=>O===E,CB=(O,E)=>O!==E,SB=(O,E)=>O===E,wB,tO=(O)=>{if(O==null)return!1;if(typeof O==="boolean")return O;if(typeof O==="number")return O!==0;if(typeof O==="string")return O.length>0;if(Array.isArray(O))return O.length>0;if(typeof O==="object"){for(let E in O)return!0;return!1}return!0},VB=(O)=>!tO(O),LB=(O)=>O===!0,qB=(O)=>O===!1,m;var EO=W(()=>{IB=nO,MB=oO,wB=aO,m={divisibleby:UB,even:KB,odd:QB,number:$B,integer:ZB,float:JB,gt:nO,ge:YB,lt:oO,le:XB,greaterthan:IB,lessthan:MB,defined:DB,undefined:MO,none:lO,None:lO,boolean:GB,string:PB,mapping:FB,iterable:zB,sequence:RB,callable:WB,lower:_B,upper:jB,empty:NB,in:HB,eq:aO,ne:CB,sameas:SB,equalto:wB,truthy:tO,falsy:VB,true:LB,false:qB}});var DO={};o(DO,{Runtime:()=>z,Context:()=>S});var z;var f=W(()=>{OO();EO();y();z=class z{options;filters;tests;blocks=new Map;parentTemplate=null;source;constructor(O={}){if(this.options={autoescape:O.autoescape??!0,filters:O.filters??{},tests:O.tests??{},globals:O.globals??{},urlResolver:O.urlResolver??((E)=>`#${E}`),staticResolver:O.staticResolver??((E)=>`/static/${E}`),templateLoader:O.templateLoader??(async()=>{throw Error("Template loader not configured")}),timezone:O.timezone??void 0},this.filters={...T,...this.options.filters},this.options.timezone){let E=this.options.timezone;this.filters.date=(A,U="N j, Y")=>{let B=A instanceof Date?A:new Date(A);if(isNaN(B.getTime()))return"";return this.formatDate(B,U)},this.filters.time=(A,U="H:i")=>{return this.filters.date(A,U)}}this.tests={...m,...this.options.tests}}async render(O,E={}){let A=new S({...this.options.globals,...E});if(this.blocks.clear(),this.parentTemplate=null,this.templateNeedsAsync(O)){if(await this.collectBlocks(O,A),this.parentTemplate)return this.renderTemplateAsync(this.parentTemplate,A);return this.renderTemplateAsync(O,A)}return this.collectBlocksSync(O),this.renderTemplateSync(O,A)}templateNeedsAsync(O){for(let E of O.body){if(E.type==="Extends"||E.type==="Include")return!0;if(E.type==="If"){let A=E;if(this.nodesNeedAsync(A.body))return!0;for(let U of A.elifs)if(this.nodesNeedAsync(U.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="For"){let A=E;if(this.nodesNeedAsync(A.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="Block"){if(this.nodesNeedAsync(E.body))return!0}if(E.type==="With"){if(this.nodesNeedAsync(E.body))return!0}}return!1}nodesNeedAsync(O){for(let E of O){if(E.type==="Extends"||E.type==="Include")return!0;if(E.type==="If"){let A=E;if(this.nodesNeedAsync(A.body))return!0;for(let U of A.elifs)if(this.nodesNeedAsync(U.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="For"){let A=E;if(this.nodesNeedAsync(A.body))return!0;if(this.nodesNeedAsync(A.else_))return!0}if(E.type==="Block"){if(this.nodesNeedAsync(E.body))return!0}if(E.type==="With"){if(this.nodesNeedAsync(E.body))return!0}}return!1}collectBlocksSync(O){for(let E of O.body)if(E.type==="Block")this.blocks.set(E.name,E)}renderTemplateSync(O,E){let A=[];for(let U of O.body){let B=this.renderNodeSync(U,E);if(B!==null)A.push(B)}return A.join("")}renderNodeSync(O,E){if(O.type==="Text")return O.value;if(O.type==="Output")return this.stringify(this.eval(O.expression,E));switch(O.type){case"If":return this.renderIfSync(O,E);case"For":return this.renderForSync(O,E);case"Block":return this.renderBlockSync(O,E);case"Set":return E.set(O.target,this.eval(O.value,E)),"";case"With":return this.renderWithSync(O,E);case"Url":return this.renderUrlSync(O,E);case"Static":return this.renderStaticSync(O,E);case"Now":return this.renderNowSync(O,E);case"Load":case"Extends":return null;case"Cycle":return this.renderCycleSync(O,E);case"Firstof":return this.renderFirstofSync(O,E);case"Ifchanged":return this.renderIfchangedSync(O,E);case"Regroup":return this.renderRegroupSync(O,E);case"Widthratio":return this.renderWidthratioSync(O,E);case"Lorem":return this.renderLoremSync(O,E);case"CsrfToken":return this.renderCsrfTokenSync();case"Debug":return this.renderDebugSync(E);case"Templatetag":return this.renderTemplatetagSync(O);default:return null}}renderIfSync(O,E){if(this.isTruthy(this.eval(O.test,E)))return this.renderNodesSync(O.body,E);for(let A of O.elifs)if(this.isTruthy(this.eval(A.test,E)))return this.renderNodesSync(A.body,E);return O.else_.length>0?this.renderNodesSync(O.else_,E):""}renderForSync(O,E){let A=this.eval(O.iter,E),U=this.toIterable(A),B=U.length;if(B===0)return this.renderNodesSync(O.else_,E);E.push(),E.pushForLoop(U,0);let Q;if(Array.isArray(O.target)){let J=O.target,Z=J.length;if(B<25){Q="";for(let K=0;K<B;K++){let $=U[K];if(K>0)E.updateForLoop(K,U);let Y=Array.isArray($)?$:[$,$];for(let X=0;X<Z;X++)E.set(J[X],Y[X]);Q+=this.renderNodesSync(O.body,E)}}else{let K=Array(B);for(let $=0;$<B;$++){let Y=U[$];if($>0)E.updateForLoop($,U);let X=Array.isArray(Y)?Y:[Y,Y];for(let I=0;I<Z;I++)E.set(J[I],X[I]);K[$]=this.renderNodesSync(O.body,E)}Q=K.join("")}}else{let J=O.target;if(B<25){Q="";for(let Z=0;Z<B;Z++){if(Z>0)E.updateForLoop(Z,U);E.set(J,U[Z]),Q+=this.renderNodesSync(O.body,E)}}else{let Z=Array(B);for(let K=0;K<B;K++){if(K>0)E.updateForLoop(K,U);E.set(J,U[K]),Z[K]=this.renderNodesSync(O.body,E)}Q=Z.join("")}}return E.popForLoop(),E.pop(),Q}renderBlockSync(O,E){let A=this.blocks.get(O.name)||O;E.push();let U=this.renderNodesSync(O.body,E),B=new String(U);B.__safe__=!0,E.set("block",{super:B});let Q=this.renderNodesSync(A.body,E);return E.pop(),Q}renderWithSync(O,E){E.push();for(let{target:U,value:B}of O.assignments)E.set(U,this.eval(B,E));let A=this.renderNodesSync(O.body,E);return E.pop(),A}renderUrlSync(O,E){let A=this.eval(O.name,E),U=[];for(let J=0;J<O.args.length;J++)U.push(this.eval(O.args[J],E));let B=this.evalObjectSync(O.kwargs,E),Q=this.options.urlResolver(String(A),U,B);if(O.asVar)return E.set(O.asVar,Q),"";return Q}renderStaticSync(O,E){let A=this.eval(O.path,E),U=this.options.staticResolver(String(A));if(O.asVar)return E.set(O.asVar,U),"";return U}renderNowSync(O,E){let A=String(this.eval(O.format,E)),U=this.formatDate(new Date,A);if(O.asVar)return E.set(O.asVar,U),"";return U}cycleState=new Map;renderCycleSync(O,E){let A=`cycle_${O.line}_${O.column}`,U=this.cycleState.get(A)??0,B=[];for(let J=0;J<O.values.length;J++)B.push(this.eval(O.values[J],E));let Q=B[U%B.length];if(this.cycleState.set(A,U+1),O.asVar)return E.set(O.asVar,Q),O.silent?"":this.stringify(Q);return this.stringify(Q)}renderFirstofSync(O,E){for(let U of O.values){let B=this.eval(U,E);if(this.isTruthy(B)){if(O.asVar)return E.set(O.asVar,B),"";return this.stringify(B)}}let A=O.fallback?this.eval(O.fallback,E):"";if(O.asVar)return E.set(O.asVar,A),"";return this.stringify(A)}ifchangedState=new Map;renderIfchangedSync(O,E){let A=`ifchanged_${O.line}_${O.column}`,U;if(O.values.length>0){let J=[];for(let Z=0;Z<O.values.length;Z++)J.push(this.eval(O.values[Z],E));U=J}else U=this.renderNodesSync(O.body,E);let B=this.ifchangedState.get(A),Q=!this.deepEqual(U,B);if(this.ifchangedState.set(A,U),Q){if(O.values.length>0)return this.renderNodesSync(O.body,E);return U}else return this.renderNodesSync(O.else_,E)}renderRegroupSync(O,E){let A=this.toIterable(this.eval(O.target,E)),U=[],B=Symbol("initial"),Q=[];for(let J of A){let Z=J&&typeof J==="object"?J[O.key]:void 0;if(Z!==B){if(Q.length>0)U.push({grouper:B,list:Q});B=Z,Q=[J]}else Q.push(J)}if(Q.length>0)U.push({grouper:B,list:Q});return E.set(O.asVar,U),""}renderWidthratioSync(O,E){let A=Number(this.eval(O.value,E)),U=Number(this.eval(O.maxValue,E)),B=Number(this.eval(O.maxWidth,E)),Q=U===0?0:Math.round(A/U*B);if(O.asVar)return E.set(O.asVar,Q),"";return String(Q)}renderLoremSync(O,E){let A=O.count?Number(this.eval(O.count,E)):1,U=O.method,B=["lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit","sed","do","eiusmod","tempor","incididunt","ut","labore","et","dolore","magna","aliqua","enim","ad","minim","veniam","quis","nostrud","exercitation","ullamco","laboris","nisi","aliquip","ex","ea","commodo","consequat","duis","aute","irure","in","reprehenderit","voluptate","velit","esse","cillum","fugiat","nulla","pariatur","excepteur","sint","occaecat","cupidatat","non","proident","sunt","culpa","qui","officia","deserunt","mollit","anim","id","est","laborum"],Q=(J)=>{if(O.random)return B[Math.floor(Math.random()*B.length)];return B[J%B.length]};if(U==="w"){let J=[];for(let Z=0;Z<A;Z++)J.push(Q(Z));return J.join(" ")}else if(U==="p"||U==="b"){let J=[];for(let Z=0;Z<A;Z++){let K=3+Z%3,$=[];for(let Y=0;Y<K;Y++){let X=8+Y%7,I=[];for(let D=0;D<X;D++)I.push(Q(Z*100+Y*20+D));I[0]=I[0].charAt(0).toUpperCase()+I[0].slice(1),$.push(I.join(" ")+".")}J.push($.join(" "))}if(U==="b")return J.join(`
|
|
25
27
|
|
|
26
28
|
`);return J.map((Z)=>`<p>${Z}</p>`).join(`
|
|
27
29
|
`)}return""}renderCsrfTokenSync(){return'<input type="hidden" name="csrfmiddlewaretoken" value="CSRF_TOKEN_PLACEHOLDER">'}renderDebugSync(O){let E=O.toObject?.()||{};return`<pre>${JSON.stringify(E,null,2)}</pre>`}renderTemplatetagSync(O){return{openblock:"{%",closeblock:"%}",openvariable:"{{",closevariable:"}}",openbrace:"{",closebrace:"}",opencomment:"{#",closecomment:"#}"}[O.tagType]||""}getDateInTimezone(O,E){if(!E)return{year:O.getFullYear(),month:O.getMonth(),day:O.getDate(),weekday:O.getDay(),hours:O.getHours(),minutes:O.getMinutes(),seconds:O.getSeconds()};let U=new Intl.DateTimeFormat("en-US",{timeZone:E,year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).formatToParts(O),B=(J)=>U.find((Z)=>Z.type===J)?.value||"",Q={Sun:0,Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6};return{year:parseInt(B("year"),10),month:parseInt(B("month"),10)-1,day:parseInt(B("day"),10),weekday:Q[B("weekday")]??0,hours:parseInt(B("hour"),10),minutes:parseInt(B("minute"),10),seconds:parseInt(B("second"),10)}}formatDate(O,E){let A=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],U=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],B=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Q=["January","February","March","April","May","June","July","August","September","October","November","December"],J=this.options.timezone,{year:Z,month:K,day:$,weekday:Y,hours:X,minutes:I,seconds:D}=this.getDateInTimezone(O,J),M="";for(let R=0;R<E.length;R++){let _=E[R];switch(_){case"d":M+=String($).padStart(2,"0");break;case"j":M+=String($);break;case"D":M+=A[Y];break;case"l":M+=U[Y];break;case"m":M+=String(K+1).padStart(2,"0");break;case"n":M+=String(K+1);break;case"M":M+=B[K];break;case"F":M+=Q[K];break;case"y":M+=String(Z).slice(-2);break;case"Y":M+=String(Z);break;case"H":M+=String(X).padStart(2,"0");break;case"G":M+=String(X);break;case"i":M+=String(I).padStart(2,"0");break;case"s":M+=String(D).padStart(2,"0");break;case"a":M+=X<12?"a.m.":"p.m.";break;case"A":M+=X<12?"AM":"PM";break;case"g":M+=String(X%12||12);break;case"h":M+=String(X%12||12).padStart(2,"0");break;default:M+=_}}return M}renderNodesSync(O,E){let A=O.length;if(A===0)return"";if(A===1)return this.renderNodeSync(O[0],E)??"";if(A===2){let B=this.renderNodeSync(O[0],E)??"",Q=this.renderNodeSync(O[1],E)??"";return B+Q}let U=[];for(let B=0;B<A;B++){let Q=this.renderNodeSync(O[B],E);if(Q!==null)U.push(Q)}return U.join("")}eval(O,E){if(O.type==="Literal")return O.value;if(O.type==="Name")return E.get(O.name);if(O.type==="GetAttr")return this.evalGetAttr(O,E);switch(O.type){case"GetItem":return this.evalGetItem(O,E);case"FilterExpr":return this.evalFilter(O,E);case"BinaryOp":return this.evalBinaryOp(O,E);case"UnaryOp":return this.evalUnaryOp(O,E);case"Compare":return this.evalCompare(O,E);case"Conditional":return this.evalConditional(O,E);case"Array":{let A=O.elements,U=[];for(let B=0;B<A.length;B++)U.push(this.eval(A[B],E));return U}case"Object":return this.evalObjectLiteral(O,E);case"FunctionCall":return this.evalFunctionCall(O,E);case"TestExpr":return this.evalTest(O,E);default:return}}evalGetAttr(O,E){let A=this.eval(O.object,E);if(A==null)return;let U=O.attribute,B=A[U];if(B===void 0){if(Array.isArray(A)){let Q=parseInt(U,10);if(!isNaN(Q))return A[Q]}return}if(typeof B==="function")return B.bind(A);return B}evalGetItem(O,E){let A=this.eval(O.object,E),U=this.eval(O.index,E);if(A==null)return;return A[U]}static TITLE_REGEX=/\b\w/g;static STRIPTAGS_REGEX=/<[^>]*>/g;static SLUGIFY_REGEX1=/[^\w\s-]/g;static SLUGIFY_REGEX2=/[\s_-]+/g;static SLUGIFY_REGEX3=/^-+|-+$/g;static WHITESPACE_REGEX=/\s+/;static URLIZE_REGEX=/(https?:\/\/[^\s]+)/g;static NEWLINE_REGEX=/\n/g;static DOUBLE_NEWLINE_REGEX=/\n\n+/;evalFilter(O,E){let A=this.eval(O.node,E),U=O.filter,B=O.args.length;if(B===0)switch(U){case"upper":return String(A??"").toUpperCase();case"lower":return String(A??"").toLowerCase();case"trim":return String(A??"").trim();case"capitalize":{let K=String(A??"");return K.charAt(0).toUpperCase()+K.slice(1).toLowerCase()}case"capfirst":{let K=String(A??"");return K.charAt(0).toUpperCase()+K.slice(1)}case"title":return String(A??"").replace(z.TITLE_REGEX,(K)=>K.toUpperCase());case"striptags":return String(A??"").replace(z.STRIPTAGS_REGEX,"");case"slugify":return String(A??"").toLowerCase().replace(z.SLUGIFY_REGEX1,"").replace(z.SLUGIFY_REGEX2,"-").replace(z.SLUGIFY_REGEX3,"");case"wordcount":{let K=String(A??"").trim();return K?K.split(z.WHITESPACE_REGEX).length:0}case"escapejs":return JSON.stringify(String(A??"")).slice(1,-1);case"linebreaksbr":{let K=String(A??"").replace(z.NEWLINE_REGEX,"<br>"),$=new String(K);return $.__safe__=!0,$}case"linebreaks":{let K=String(A??"").split(z.DOUBLE_NEWLINE_REGEX),$="";for(let X=0;X<K.length;X++){if(X>0)$+=`
|
|
@@ -32,18 +34,18 @@ ${J}`,K++;Z+=`</li>
|
|
|
32
34
|
`)this.line++,this.column=0;this.advance()}if(this.check("}}"))this.match("}}"),this.addToken("CLOSE","}}")}scanBlockComment(){while(!this.isAtEnd()&&!this.check("--}}")){if(this.peek()===`
|
|
33
35
|
`)this.line++,this.column=0;this.advance()}if(this.check("--}}"))this.match("--}}")}isAtEnd(){return this.pos>=this.source.length}peek(){return this.source[this.pos]||"\x00"}peekNext(){return this.source[this.pos+1]||"\x00"}advance(){let O=this.source[this.pos];return this.pos++,this.column++,O}check(O){for(let E=0;E<O.length;E++)if(this.source[this.pos+E]!==O[E])return!1;return!0}match(O){if(!this.check(O))return!1;return this.pos+=O.length,this.column+=O.length,!0}skipWhitespace(){while(this.peek()===" "||this.peek()==="\t"||this.peek()===`
|
|
34
36
|
`||this.peek()==="\r"){if(this.peek()===`
|
|
35
|
-
`)this.line++,this.column=0;this.advance()}}isDigit(O){return O>="0"&&O<="9"}isAlpha(O){return O>="a"&&O<="z"||O>="A"&&O<="Z"}isAlphaNumeric(O){return this.isDigit(O)||this.isAlpha(O)}addToken(O,E){this.tokens.push({type:O,value:E,line:this.line,column:this.column-E.length})}}var AO;var BO=W(()=>{((
|
|
37
|
+
`)this.line++,this.column=0;this.advance()}}isDigit(O){return O>="0"&&O<="9"}isAlpha(O){return O>="a"&&O<="z"||O>="A"&&O<="Z"}isAlphaNumeric(O){return this.isDigit(O)||this.isAlpha(O)}addToken(O,E){this.tokens.push({type:O,value:E,line:this.line,column:this.column-E.length})}}var AO;var BO=W(()=>{((G)=>{G.TEXT="TEXT";G.OPEN="OPEN";G.OPEN_BLOCK="OPEN_BLOCK";G.OPEN_END="OPEN_END";G.OPEN_PARTIAL="OPEN_PARTIAL";G.OPEN_UNESCAPED="OPEN_UNESCAPED";G.OPEN_COMMENT="OPEN_COMMENT";G.CLOSE="CLOSE";G.CLOSE_UNESCAPED="CLOSE_UNESCAPED";G.ID="ID";G.STRING="STRING";G.NUMBER="NUMBER";G.BOOLEAN="BOOLEAN";G.DOT="DOT";G.DOTDOT="DOTDOT";G.SLASH="SLASH";G.EQUALS="EQUALS";G.PIPE="PIPE";G.EOF="EOF"})(AO||={})});class d{tokens;current=0;source;constructor(O,E=""){this.tokens=O,this.source=E}parse(){return{type:"Template",body:this.parseNodes(),line:1,column:1}}parseNodes(O=[]){let E=[];while(!this.isAtEnd()){let A=this.peek();if(A.type==="OPEN_END"){let B=this.tokens[this.current+1];if(B&&O.includes(B.value))break}if(A.type==="OPEN"&&O.includes("else")){if(this.tokens[this.current+1]?.value==="else")break}let U=this.parseNode();if(U)E.push(U)}return E}parseNode(){switch(this.peek().type){case"TEXT":return this.parseText();case"OPEN":case"OPEN_UNESCAPED":return this.parseOutput();case"OPEN_BLOCK":return this.parseBlock();case"OPEN_END":return this.consumeEndBlock(),null;case"OPEN_COMMENT":return this.skipComment(),null;case"OPEN_PARTIAL":return this.parsePartial();default:return this.advance(),null}}parseText(){let O=this.advance();return{type:"Text",value:O.value,line:O.line,column:O.column}}parseOutput(){let O=this.advance(),E=O.type==="OPEN_UNESCAPED",A=this.parseExpression();if(E)this.expect("CLOSE_UNESCAPED");else this.expect("CLOSE");if(E)return{type:"Output",expression:{type:"FilterExpr",node:A,filter:"safe",args:[],kwargs:{},line:O.line,column:O.column},line:O.line,column:O.column};return{type:"Output",expression:A,line:O.line,column:O.column}}parseBlock(){let O=this.advance(),E=this.expect("ID").value,A=O.line,U=O.column,B=[],Q={};while(!this.check("CLOSE"))if(this.check("ID")&&this.tokens[this.current+1]?.type==="EQUALS"){let J=this.advance().value;this.advance(),Q[J]=this.parseExpressionAtom()}else B.push(this.parseExpressionAtom());switch(this.expect("CLOSE"),E){case"if":return this.parseIfBlock(B[0],A,U);case"unless":return this.parseUnlessBlock(B[0],A,U);case"each":return this.parseEachBlock(B[0],A,U);case"with":return this.parseWithBlock(B[0],A,U);default:return this.parseCustomBlock(E,B,Q,A,U)}}parseIfBlock(O,E,A){let U=this.parseNodes(["if","else"]),B=[];if(this.checkOpenBlock("else"))this.consumeElse(),B=this.parseNodes(["if"]);return this.consumeEndBlock(),{type:"If",test:O,body:U,elifs:[],else_:B,line:E,column:A}}parseUnlessBlock(O,E,A){let U=this.parseNodes(["unless"]);return this.consumeEndBlock(),{type:"If",test:{type:"UnaryOp",operator:"not",operand:O,line:E,column:A},body:U,elifs:[],else_:[],line:E,column:A}}parseEachBlock(O,E,A){let U=this.parseNodes(["each","else"]),B=[];if(this.checkOpenBlock("else"))this.consumeElse(),B=this.parseNodes(["each"]);return this.consumeEndBlock(),{type:"For",target:"this",iter:O,body:U,else_:B,line:E,column:A}}parseWithBlock(O,E,A){let U=this.parseNodes(["with"]);return this.consumeEndBlock(),{type:"With",assignments:[{target:"this",value:O}],body:U,line:E,column:A}}parseCustomBlock(O,E,A,U,B){let Q=this.parseNodes([O]);return this.consumeEndBlock(),{type:"Output",expression:{type:"FunctionCall",callee:{type:"Name",name:O,line:U,column:B},args:E,kwargs:A,line:U,column:B},line:U,column:B}}parsePartial(){let O=this.advance(),E=this.expect("ID").value,A;if(!this.check("CLOSE"))A=this.parseExpressionAtom();return this.expect("CLOSE"),{type:"Include",template:{type:"Literal",value:E,line:O.line,column:O.column},context:A?{_:A}:void 0,line:O.line,column:O.column}}parseExpression(){let O=this.parseExpressionAtom();while(this.check("ID")||this.check("STRING")||this.check("NUMBER")){let E=[O];while(!this.check("CLOSE")&&!this.check("CLOSE_UNESCAPED")&&!this.check("PIPE"))E.push(this.parseExpressionAtom());if(E.length>1){let A=E.shift();O={type:"FunctionCall",callee:A,args:E,kwargs:{},line:A.line,column:A.column}}}return O}parseExpressionAtom(){let O=this.peek();switch(O.type){case"STRING":return this.advance(),{type:"Literal",value:O.value,line:O.line,column:O.column};case"NUMBER":return this.advance(),{type:"Literal",value:parseFloat(O.value),line:O.line,column:O.column};case"BOOLEAN":return this.advance(),{type:"Literal",value:O.value==="true",line:O.line,column:O.column};case"ID":return this.parsePath();case"DOTDOT":return this.advance(),{type:"Name",name:"__parent__",line:O.line,column:O.column};default:return this.advance(),{type:"Literal",value:null,line:O.line,column:O.column}}}parsePath(){let O=this.advance(),E={type:"Name",name:O.value,line:O.line,column:O.column};if(O.value.startsWith("@")){let A=O.value.slice(1),U={index:"forloop.counter0",key:"forloop.key",first:"forloop.first",last:"forloop.last"};if(U[A]){let B=U[A].split(".");E={type:"Name",name:B[0],line:O.line,column:O.column};for(let Q=1;Q<B.length;Q++)E={type:"GetAttr",object:E,attribute:B[Q],line:O.line,column:O.column}}}while(this.check("DOT")||this.check("SLASH"))if(this.advance(),this.check("ID")){let A=this.advance();E={type:"GetAttr",object:E,attribute:A.value,line:A.line,column:A.column}}return E}checkOpenBlock(O){if(!this.check("OPEN"))return!1;let E=this.tokens[this.current+1];return E?.type==="ID"&&E.value===O}consumeElse(){this.expect("OPEN"),this.expect("ID"),this.expect("CLOSE")}consumeEndBlock(){if(this.check("OPEN_END")){if(this.advance(),this.check("ID"))this.advance();if(this.check("CLOSE"))this.advance()}}skipComment(){this.advance();while(!this.isAtEnd()&&!this.check("CLOSE"))this.advance();if(this.check("CLOSE"))this.advance()}isAtEnd(){return this.current>=this.tokens.length||this.peek().type==="EOF"}peek(){return this.tokens[this.current]||{type:"EOF",value:"",line:1,column:1}}advance(){if(!this.isAtEnd())this.current++;return this.tokens[this.current-1]}check(O){return this.peek().type===O}expect(O){if(this.check(O))return this.advance();throw Error(`Expected ${O} but got ${this.peek().type}`)}}var FO=W(()=>{BO()});var WO={};o(WO,{render:()=>QE,parse:()=>zO,engine:()=>nB,compile:()=>RO,HbsTokenType:()=>AO,HandlebarsParser:()=>d,HandlebarsLexer:()=>i});function zO(O){let A=new i(O).tokenize();return new d(A,O).parse()}function RO(O){let E=zO(O),{Runtime:A}=(f(),kO(DO)),U=new A;return async(B)=>{return U.render(E,B,O)}}async function QE(O,E={}){return RO(O)(E)}var nB;var _O=W(()=>{BO();FO();BO();FO();nB={name:"handlebars",extensions:[".hbs",".handlebars"],parse:zO,compile:RO,render:QE}});class u{source;pos=0;line=1;column=1;tokens=[];constructor(O){this.source=O}tokenize(){while(!this.isAtEnd())this.scanToken();return this.addToken("EOF",""),this.tokens}scanToken(){if(this.checkRawTag()){this.scanRawBlock();return}if(this.check("{{")){if(this.match("{{"),this.peek()==="-")this.advance();this.addToken("VAR_START","{{"),this.scanExpression("}}");return}if(this.check("{%")){if(this.match("{%"),this.peek()==="-")this.advance();this.addToken("TAG_START","{%"),this.scanExpression("%}");return}this.scanText()}checkRawTag(){let O=this.source.slice(this.pos);return/^\{%\s*raw\s*%\}/.test(O)}scanRawBlock(){let O=this.source.slice(this.pos).match(/^\{%\s*raw\s*%\}/);if(!O)return;let E=O[0];this.pos+=E.length,this.column+=E.length,this.addToken("TAG_START","{%"),this.addToken("ID","raw"),this.addToken("TAG_END","%}");let A=this.pos,U=this.line,B=this.column;while(!this.isAtEnd()){let J=this.source.slice(this.pos);if(/^\{%\s*endraw\s*%\}/.test(J))break;if(this.peek()===`
|
|
36
38
|
`)this.line++,this.column=0;this.advance()}if(this.pos>A){let J=this.source.slice(A,this.pos);this.tokens.push({type:"TEXT",value:J,line:U,column:B})}let Q=this.source.slice(this.pos).match(/^\{%\s*endraw\s*%\}/);if(Q){let J=Q[0];this.pos+=J.length,this.column+=J.length,this.addToken("TAG_START","{%"),this.addToken("ID","endraw"),this.addToken("TAG_END","%}")}}scanText(){let O=this.pos,E=this.line,A=this.column;while(!this.isAtEnd()&&!this.check("{{")&&!this.check("{%")){if(this.peek()===`
|
|
37
39
|
`)this.line++,this.column=0;this.advance()}if(this.pos>O)this.tokens.push({type:"TEXT",value:this.source.slice(O,this.pos),line:E,column:A})}scanExpression(O){this.skipWhitespace();while(!this.isAtEnd()){if(this.skipWhitespace(),this.peek()==="-"&&this.check("-"+O))this.advance();if(this.check(O)){this.match(O),this.addToken(O==="}}"?"VAR_END":"TAG_END",O);return}this.scanExpressionToken()}}scanExpressionToken(){let O=this.peek();if(O==='"'||O==="'"){this.scanString(O);return}if(this.isDigit(O)||O==="-"&&this.isDigit(this.peekNext())){this.scanNumber();return}if(O==="."){if(this.peekNext()===".")this.advance(),this.advance(),this.addToken("RANGE","..");else this.advance(),this.addToken("DOT",".");return}if(O==="|"){this.advance(),this.addToken("PIPE","|");return}if(O===":"){this.advance(),this.addToken("COLON",":");return}if(O===","){this.advance(),this.addToken("COMMA",",");return}if(O==="["){this.advance(),this.addToken("LBRACKET","[");return}if(O==="]"){this.advance(),this.addToken("RBRACKET","]");return}if(O==="="){if(this.peekNext()==="=")this.advance(),this.advance(),this.addToken("EQ","==");else this.advance(),this.addToken("EQUALS","=");return}if(O==="!"&&this.peekNext()==="="){this.advance(),this.advance(),this.addToken("NE","!=");return}if(O==="<"){if(this.peekNext()==="=")this.advance(),this.advance(),this.addToken("LE","<=");else if(this.peekNext()===">")this.advance(),this.advance(),this.addToken("NE","<>");else this.advance(),this.addToken("LT","<");return}if(O===">"){if(this.peekNext()==="=")this.advance(),this.advance(),this.addToken("GE",">=");else this.advance(),this.addToken("GT",">");return}if(this.isAlpha(O)||O==="_"){this.scanIdentifier();return}this.advance()}scanString(O){this.advance();let E=this.pos;while(!this.isAtEnd()&&this.peek()!==O){if(this.peek()==="\\")this.advance();if(this.peek()===`
|
|
38
40
|
`)this.line++,this.column=0;this.advance()}let A=this.source.slice(E,this.pos);this.advance(),this.addToken("STRING",A)}scanNumber(){let O=this.pos;if(this.peek()==="-")this.advance();while(this.isDigit(this.peek()))this.advance();if(this.peek()==="."&&this.isDigit(this.peekNext())){this.advance();while(this.isDigit(this.peek()))this.advance()}this.addToken("NUMBER",this.source.slice(O,this.pos))}scanIdentifier(){let O=this.pos;while(this.isAlphaNumeric(this.peek())||this.peek()==="_"||this.peek()==="-")this.advance();let E=this.source.slice(O,this.pos);switch(E){case"and":this.addToken("AND",E);break;case"or":this.addToken("OR",E);break;case"contains":this.addToken("CONTAINS",E);break;default:this.addToken("ID",E)}}isAtEnd(){return this.pos>=this.source.length}peek(){return this.source[this.pos]||"\x00"}peekNext(){return this.source[this.pos+1]||"\x00"}advance(){let O=this.source[this.pos];return this.pos++,this.column++,O}check(O){for(let E=0;E<O.length;E++)if(this.source[this.pos+E]!==O[E])return!1;return!0}match(O){if(!this.check(O))return!1;return this.pos+=O.length,this.column+=O.length,!0}skipWhitespace(){while(this.peek()===" "||this.peek()==="\t"||this.peek()===`
|
|
39
41
|
`||this.peek()==="\r"){if(this.peek()===`
|
|
40
|
-
`)this.line++,this.column=0;this.advance()}}isDigit(O){return O>="0"&&O<="9"}isAlpha(O){return O>="a"&&O<="z"||O>="A"&&O<="Z"}isAlphaNumeric(O){return this.isDigit(O)||this.isAlpha(O)}addToken(O,E){this.tokens.push({type:O,value:E,line:this.line,column:this.column-E.length})}}var UO;var KO=W(()=>{((G)=>{G.TEXT="TEXT";G.VAR_START="VAR_START";G.VAR_END="VAR_END";G.TAG_START="TAG_START";G.TAG_END="TAG_END";G.ID="ID";G.STRING="STRING";G.NUMBER="NUMBER";G.DOT="DOT";G.PIPE="PIPE";G.COLON="COLON";G.COMMA="COMMA";G.LBRACKET="LBRACKET";G.RBRACKET="RBRACKET";G.RANGE="RANGE";G.EQUALS="EQUALS";G.EQ="EQ";G.NE="NE";G.LT="LT";G.LE="LE";G.GT="GT";G.GE="GE";G.CONTAINS="CONTAINS";G.AND="AND";G.OR="OR";G.EOF="EOF"})(UO||={})});class r{tokens;current=0;source;constructor(O,E=""){this.tokens=O,this.source=E}parse(){return{type:"Template",body:this.parseNodes(),line:1,column:1}}parseNodes(O=[]){let E=[];while(!this.isAtEnd()){if(this.peek().type==="TAG_START"){let B=this.tokens[this.current+1];if(B&&O.includes(B.value))break}let U=this.parseNode();if(U)E.push(U)}return E}parseNode(){switch(this.peek().type){case"TEXT":return this.parseText();case"VAR_START":return this.parseOutput();case"TAG_START":return this.parseTag();default:return this.advance(),null}}parseText(){let O=this.advance();return{type:"Text",value:O.value,line:O.line,column:O.column}}parseOutput(){let O=this.advance(),E=this.parseExpression();return this.expect("VAR_END"),{type:"Output",expression:E,line:O.line,column:O.column}}parseTag(){this.advance();let O=this.expect("ID"),E=O.value,A=O.line,U=O.column;switch(E){case"if":return this.parseIfTag(A,U);case"unless":return this.parseUnlessTag(A,U);case"case":return this.parseCaseTag(A,U);case"for":return this.parseForTag(A,U);case"assign":return this.parseAssignTag(A,U);case"capture":return this.parseCaptureTag(A,U);case"increment":case"decrement":return this.parseIncrementTag(E,A,U);case"include":case"render":return this.parseIncludeTag(A,U);case"comment":return this.parseCommentTag();case"raw":return this.parseRawTag(A,U);case"break":return this.expect("TAG_END"),{type:"Break",line:A,column:U};case"continue":return this.expect("TAG_END"),{type:"Continue",line:A,column:U};case"endif":case"endunless":case"endcase":case"endfor":case"endcapture":case"endcomment":case"endraw":case"elsif":case"else":case"when":return this.current-=2,null;default:while(!this.check("TAG_END")&&!this.isAtEnd())this.advance();if(this.check("TAG_END"))this.advance();return null}}parseIfTag(O,E){let A=this.parseCondition();this.expect("TAG_END");let U=this.parseNodes(["elsif","else","endif"]),B=[],Q=[];while(this.checkTag("elsif")){this.consumeTag("elsif");let J=this.parseCondition();this.expect("TAG_END");let Z=this.parseNodes(["elsif","else","endif"]);B.push({test:J,body:Z})}if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),Q=this.parseNodes(["endif"]);return this.consumeTag("endif"),this.expect("TAG_END"),{type:"If",test:A,body:U,elifs:B,else_:Q,line:O,column:E}}parseUnlessTag(O,E){let A=this.parseCondition();this.expect("TAG_END");let U=this.parseNodes(["else","endunless"]),B=[];if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),B=this.parseNodes(["endunless"]);return this.consumeTag("endunless"),this.expect("TAG_END"),{type:"If",test:{type:"UnaryOp",operator:"not",operand:A,line:O,column:E},body:U,elifs:[],else_:B,line:O,column:E}}parseCaseTag(O,E){let A=this.parseExpressionAtom();this.expect("TAG_END"),this.parseNodes(["when","else","endcase"]);let U=[],B=[];while(this.checkTag("when")){this.consumeTag("when");let Z=this.parseExpressionAtom();this.expect("TAG_END");let K=this.parseNodes(["when","else","endcase"]);U.push({value:Z,body:K})}if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),B=this.parseNodes(["endcase"]);if(this.consumeTag("endcase"),this.expect("TAG_END"),U.length===0)return{type:"Text",value:"",line:O,column:E};let Q=U[0],J=U.slice(1).map((Z)=>({test:{type:"Compare",left:A,ops:[{operator:"==",right:Z.value}],line:O,column:E},body:Z.body}));return{type:"If",test:{type:"Compare",left:A,ops:[{operator:"==",right:Q.value}],line:O,column:E},body:Q.body,elifs:J,else_:B,line:O,column:E}}parseForTag(O,E){let A=this.expect("ID").value;this.expectKeyword("in");let U=this.parseForIterable(),B,Q,J=!1;while(!this.check("TAG_END"))if(this.checkKeyword("limit"))this.advance(),this.expect("COLON"),B=this.parseExpressionAtom();else if(this.checkKeyword("offset"))this.advance(),this.expect("COLON"),Q=this.parseExpressionAtom();else if(this.checkKeyword("reversed"))this.advance(),J=!0;else break;this.expect("TAG_END");let Z=this.parseNodes(["else","endfor"]),K=[];if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),K=this.parseNodes(["endfor"]);return this.consumeTag("endfor"),this.expect("TAG_END"),{type:"For",target:A,iter:U,body:Z,else_:K,line:O,column:E}}parseForIterable(){if(this.check("LBRACKET")||this.peek().type==="ID"&&this.peek().value==="("){if(this.peek().value==="(")this.advance();if(this.check("LBRACKET"))this.advance();let O=this.parseExpressionAtom();if(this.check("RANGE")){this.advance();let E=this.parseExpressionAtom();if(this.peek().value===")")this.advance();if(this.check("RBRACKET"))this.advance();return{type:"FunctionCall",callee:{type:"Name",name:"range",line:O.line,column:O.column},args:[O,E],kwargs:{},line:O.line,column:O.column}}}return this.parseExpressionAtom()}parseAssignTag(O,E){let A=this.expect("ID").value;this.expect("EQUALS");let U=this.parseExpression();return this.expect("TAG_END"),{type:"Set",target:A,value:U,line:O,column:E}}parseCaptureTag(O,E){let A=this.expect("ID").value;this.expect("TAG_END");let U=this.parseNodes(["endcapture"]);return this.consumeTag("endcapture"),this.expect("TAG_END"),{type:"Set",targets:[A],value:{type:"Capture",body:U,line:O,column:E},line:O,column:E}}parseIncrementTag(O,E,A){let U=this.expect("ID").value;return this.expect("TAG_END"),{type:"Output",expression:{type:"FunctionCall",callee:{type:"Name",name:O,line:E,column:A},args:[{type:"Name",name:U,line:E,column:A}],kwargs:{},line:E,column:A},line:E,column:A}}parseIncludeTag(O,E){let A=this.parseExpressionAtom(),U={};if(this.checkKeyword("with")){this.advance();let B=this.parseExpressionAtom();U._=B}while(this.check("ID")||this.check("COMMA")){if(this.check("COMMA"))this.advance();if(!this.check("ID"))break;let B=this.advance().value;if(this.check("COLON"))this.advance(),U[B]=this.parseExpressionAtom()}return this.expect("TAG_END"),{type:"Include",template:A,context:Object.keys(U).length>0?U:void 0,line:O,column:E}}parseCommentTag(){while(!this.isAtEnd()){if(this.checkTag("endcomment")){this.consumeTag("endcomment"),this.expect("TAG_END");break}this.advance()}return null}parseRawTag(O,E){this.expect("TAG_END");let A="";while(!this.isAtEnd()){if(this.checkTag("endraw")){this.consumeTag("endraw"),this.expect("TAG_END");break}let U=this.advance();A+=U.value}return{type:"Text",value:A,line:O,column:E}}parseCondition(){return this.parseOr()}parseOr(){let O=this.parseAnd();while(this.check("OR")){this.advance();let E=this.parseAnd();O={type:"BinaryOp",operator:"or",left:O,right:E,line:O.line,column:O.column}}return O}parseAnd(){let O=this.parseComparison();while(this.check("AND")){this.advance();let E=this.parseComparison();O={type:"BinaryOp",operator:"and",left:O,right:E,line:O.line,column:O.column}}return O}parseComparison(){let O=this.parseExpressionAtom(),E={EQ:"==",NE:"!=",LT:"<",LE:"<=",GT:">",GE:">="},A=this.peek();if(E[A.type]){this.advance();let U=this.parseExpressionAtom();return{type:"Compare",left:O,ops:[{operator:E[A.type],right:U}],line:O.line,column:O.column}}if(this.check("CONTAINS")){this.advance();let U=this.parseExpressionAtom();return{type:"Test",node:O,test:"in",args:[U],line:O.line,column:O.column}}return O}parseExpression(){let O=this.parseExpressionAtom();while(this.check("PIPE")){this.advance();let E=this.expect("ID").value,A=[];if(this.check("COLON")){this.advance(),A.push(this.parseExpressionAtom());while(this.check("COMMA"))this.advance(),A.push(this.parseExpressionAtom())}O={type:"FilterExpr",node:O,filter:E,args:A,kwargs:{},line:O.line,column:O.column}}return O}parseExpressionAtom(){let O=this.peek();switch(O.type){case"STRING":return this.advance(),{type:"Literal",value:O.value,line:O.line,column:O.column};case"NUMBER":return this.advance(),{type:"Literal",value:parseFloat(O.value),line:O.line,column:O.column};case"ID":if(O.value==="true"||O.value==="false")return this.advance(),{type:"Literal",value:O.value==="true",line:O.line,column:O.column};if(O.value==="nil"||O.value==="null")return this.advance(),{type:"Literal",value:null,line:O.line,column:O.column};if(O.value==="empty"||O.value==="blank")return this.advance(),{type:"Literal",value:"",line:O.line,column:O.column};return this.parsePath();default:return this.advance(),{type:"Literal",value:null,line:O.line,column:O.column}}}parsePath(){let O=this.advance(),E={type:"Name",name:O.value,line:O.line,column:O.column};if(O.value==="forloop"){if(this.check("DOT")){if(this.advance(),this.check("ID")){let A=this.advance(),B={index:"counter",index0:"counter0",first:"first",last:"last",length:"length",rindex:"revcounter",rindex0:"revcounter0"}[A.value]||A.value;E={type:"GetAttr",object:E,attribute:B,line:A.line,column:A.column}}}return E}while(this.check("DOT")||this.check("LBRACKET"))if(this.check("DOT")){if(this.advance(),this.check("ID")){let A=this.advance();E={type:"GetAttr",object:E,attribute:A.value,line:A.line,column:A.column}}}else if(this.check("LBRACKET")){this.advance();let A=this.parseExpressionAtom();this.expect("RBRACKET"),E={type:"GetItem",object:E,index:A,line:A.line,column:A.column}}return E}checkTag(O){if(!this.check("TAG_START"))return!1;let E=this.tokens[this.current+1];return E?.type==="ID"&&E.value===O}consumeTag(O){this.expect("TAG_START"),this.expect("ID")}checkKeyword(O){return this.check("ID")&&this.peek().value===O}expectKeyword(O){if(!this.checkKeyword(O))throw Error(`Expected keyword '${O}' but got '${this.peek().value}'`);this.advance()}isAtEnd(){return this.current>=this.tokens.length||this.peek().type==="EOF"}peek(){return this.tokens[this.current]||{type:"EOF",value:"",line:1,column:1}}advance(){if(!this.isAtEnd())this.current++;return this.tokens[this.current-1]}check(O){return this.peek().type===O}expect(O){if(this.check(O))return this.advance();throw Error(`Expected ${O} but got ${this.peek().type}`)}}var jO=W(()=>{KO()});var CO={};o(CO,{render:()=>$E,parse:()=>NO,engine:()=>oB,compile:()=>HO,LiquidTokenType:()=>UO,LiquidParser:()=>r,LiquidLexer:()=>u});function NO(O){let A=new u(O).tokenize();return new r(A,O).parse()}function HO(O){let E=NO(O),{Runtime:A}=(f(),kO(DO)),U=new A;return async(B)=>{return U.render(E,B,O)}}async function $E(O,E={}){return HO(O)(E)}var oB;var SO=W(()=>{KO();jO();KO();jO();oB={name:"liquid",extensions:[".liquid"],parse:NO,compile:HO,render:$E}});var l;var wO=W(()=>{x();l=class l extends h{constructor(O){super(O)}}});var VO,n;var LO=W(()=>{e();VO={e:"escape",raw:"safe",nl2br:"linebreaksbr",number_format:"floatformat",striptags:"striptags",json_encode:"json",merge:"concat",keys:"list",column:"map"};n=class n extends b{constructor(O,E=""){super(O,E)}parse(){let O=super.parse();return this.transformTwigAST(O)}transformTwigAST(O){return{...O,body:O.body.map((E)=>this.transformNode(E))}}transformNode(O){if(!O||typeof O!=="object")return O;if(O.type==="Conditional")return{...O,test:this.transformNode(O.test),body:this.transformNode(O.body),else_:this.transformNode(O.else_)};if(O.type==="BinOp"&&O.operator==="??")return{type:"Conditional",test:{type:"Compare",left:this.transformNode(O.left),ops:[{operator:"isnot",right:{type:"Literal",value:null,line:O.line,column:O.column}}],line:O.line,column:O.column},body:this.transformNode(O.left),else_:this.transformNode(O.right),line:O.line,column:O.column};if(O.type==="FilterExpr"){let E=VO[O.filter]||O.filter;return{...O,filter:E,node:this.transformNode(O.node),args:O.args?.map((A)=>this.transformNode(A))||[]}}if(O.body)O.body=Array.isArray(O.body)?O.body.map((E)=>this.transformNode(E)):this.transformNode(O.body);if(O.else_)O.else_=Array.isArray(O.else_)?O.else_.map((E)=>this.transformNode(E)):this.transformNode(O.else_);if(O.expression)O.expression=this.transformNode(O.expression);if(O.test)O.test=this.transformNode(O.test);if(O.elifs)O.elifs=O.elifs.map((E)=>({...E,test:this.transformNode(E.test),body:E.body.map((A)=>this.transformNode(A))}));if(O.iter)O.iter=this.transformNode(O.iter);if(O.left)O.left=this.transformNode(O.left);if(O.right)O.right=this.transformNode(O.right);if(O.object)O.object=this.transformNode(O.object);if(O.operand)O.operand=this.transformNode(O.operand);if(O.args)O.args=O.args.map((E)=>this.transformNode(E));return O}}});var qO={};o(qO,{render:()=>JE,parse:()=>QO,engine:()=>aB,compile:()=>ZE,TwigParser:()=>n,TwigLexer:()=>l,TWIG_FILTER_MAP:()=>VO});function QO(O){let A=new l(O).tokenize();return new n(A,O).parse()}function ZE(O){let E=QO(O),A=new z;return async(U)=>A.render(E,U)}async function JE(O,E={}){let A=QO(O);return new z().render(A,E)}var aB;var hO=W(()=>{wO();LO();f();wO();LO();aB={name:"twig",extensions:[".twig",".html.twig"],parse:QO,compile:ZE,render:JE}});import{readFile as YE}from"fs/promises";import{join as XE,extname as bO}from"path";x();e();f();OO();EO();function eO(O,E={}){return new EE(E).compile(O)}function OE(O,E={}){let A=eO(O,E),U=Function("__ctx","__helpers",`
|
|
42
|
+
`)this.line++,this.column=0;this.advance()}}isDigit(O){return O>="0"&&O<="9"}isAlpha(O){return O>="a"&&O<="z"||O>="A"&&O<="Z"}isAlphaNumeric(O){return this.isDigit(O)||this.isAlpha(O)}addToken(O,E){this.tokens.push({type:O,value:E,line:this.line,column:this.column-E.length})}}var UO;var KO=W(()=>{((P)=>{P.TEXT="TEXT";P.VAR_START="VAR_START";P.VAR_END="VAR_END";P.TAG_START="TAG_START";P.TAG_END="TAG_END";P.ID="ID";P.STRING="STRING";P.NUMBER="NUMBER";P.DOT="DOT";P.PIPE="PIPE";P.COLON="COLON";P.COMMA="COMMA";P.LBRACKET="LBRACKET";P.RBRACKET="RBRACKET";P.RANGE="RANGE";P.EQUALS="EQUALS";P.EQ="EQ";P.NE="NE";P.LT="LT";P.LE="LE";P.GT="GT";P.GE="GE";P.CONTAINS="CONTAINS";P.AND="AND";P.OR="OR";P.EOF="EOF"})(UO||={})});class r{tokens;current=0;source;constructor(O,E=""){this.tokens=O,this.source=E}parse(){return{type:"Template",body:this.parseNodes(),line:1,column:1}}parseNodes(O=[]){let E=[];while(!this.isAtEnd()){if(this.peek().type==="TAG_START"){let B=this.tokens[this.current+1];if(B&&O.includes(B.value))break}let U=this.parseNode();if(U)E.push(U)}return E}parseNode(){switch(this.peek().type){case"TEXT":return this.parseText();case"VAR_START":return this.parseOutput();case"TAG_START":return this.parseTag();default:return this.advance(),null}}parseText(){let O=this.advance();return{type:"Text",value:O.value,line:O.line,column:O.column}}parseOutput(){let O=this.advance(),E=this.parseExpression();return this.expect("VAR_END"),{type:"Output",expression:E,line:O.line,column:O.column}}parseTag(){this.advance();let O=this.expect("ID"),E=O.value,A=O.line,U=O.column;switch(E){case"if":return this.parseIfTag(A,U);case"unless":return this.parseUnlessTag(A,U);case"case":return this.parseCaseTag(A,U);case"for":return this.parseForTag(A,U);case"assign":return this.parseAssignTag(A,U);case"capture":return this.parseCaptureTag(A,U);case"increment":case"decrement":return this.parseIncrementTag(E,A,U);case"include":case"render":return this.parseIncludeTag(A,U);case"comment":return this.parseCommentTag();case"raw":return this.parseRawTag(A,U);case"break":return this.expect("TAG_END"),{type:"Break",line:A,column:U};case"continue":return this.expect("TAG_END"),{type:"Continue",line:A,column:U};case"endif":case"endunless":case"endcase":case"endfor":case"endcapture":case"endcomment":case"endraw":case"elsif":case"else":case"when":return this.current-=2,null;default:while(!this.check("TAG_END")&&!this.isAtEnd())this.advance();if(this.check("TAG_END"))this.advance();return null}}parseIfTag(O,E){let A=this.parseCondition();this.expect("TAG_END");let U=this.parseNodes(["elsif","else","endif"]),B=[],Q=[];while(this.checkTag("elsif")){this.consumeTag("elsif");let J=this.parseCondition();this.expect("TAG_END");let Z=this.parseNodes(["elsif","else","endif"]);B.push({test:J,body:Z})}if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),Q=this.parseNodes(["endif"]);return this.consumeTag("endif"),this.expect("TAG_END"),{type:"If",test:A,body:U,elifs:B,else_:Q,line:O,column:E}}parseUnlessTag(O,E){let A=this.parseCondition();this.expect("TAG_END");let U=this.parseNodes(["else","endunless"]),B=[];if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),B=this.parseNodes(["endunless"]);return this.consumeTag("endunless"),this.expect("TAG_END"),{type:"If",test:{type:"UnaryOp",operator:"not",operand:A,line:O,column:E},body:U,elifs:[],else_:B,line:O,column:E}}parseCaseTag(O,E){let A=this.parseExpressionAtom();this.expect("TAG_END"),this.parseNodes(["when","else","endcase"]);let U=[],B=[];while(this.checkTag("when")){this.consumeTag("when");let Z=this.parseExpressionAtom();this.expect("TAG_END");let K=this.parseNodes(["when","else","endcase"]);U.push({value:Z,body:K})}if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),B=this.parseNodes(["endcase"]);if(this.consumeTag("endcase"),this.expect("TAG_END"),U.length===0)return{type:"Text",value:"",line:O,column:E};let Q=U[0],J=U.slice(1).map((Z)=>({test:{type:"Compare",left:A,ops:[{operator:"==",right:Z.value}],line:O,column:E},body:Z.body}));return{type:"If",test:{type:"Compare",left:A,ops:[{operator:"==",right:Q.value}],line:O,column:E},body:Q.body,elifs:J,else_:B,line:O,column:E}}parseForTag(O,E){let A=this.expect("ID").value;this.expectKeyword("in");let U=this.parseForIterable(),B,Q,J=!1;while(!this.check("TAG_END"))if(this.checkKeyword("limit"))this.advance(),this.expect("COLON"),B=this.parseExpressionAtom();else if(this.checkKeyword("offset"))this.advance(),this.expect("COLON"),Q=this.parseExpressionAtom();else if(this.checkKeyword("reversed"))this.advance(),J=!0;else break;this.expect("TAG_END");let Z=this.parseNodes(["else","endfor"]),K=[];if(this.checkTag("else"))this.consumeTag("else"),this.expect("TAG_END"),K=this.parseNodes(["endfor"]);return this.consumeTag("endfor"),this.expect("TAG_END"),{type:"For",target:A,iter:U,body:Z,else_:K,line:O,column:E}}parseForIterable(){if(this.check("LBRACKET")||this.peek().type==="ID"&&this.peek().value==="("){if(this.peek().value==="(")this.advance();if(this.check("LBRACKET"))this.advance();let O=this.parseExpressionAtom();if(this.check("RANGE")){this.advance();let E=this.parseExpressionAtom();if(this.peek().value===")")this.advance();if(this.check("RBRACKET"))this.advance();return{type:"FunctionCall",callee:{type:"Name",name:"range",line:O.line,column:O.column},args:[O,E],kwargs:{},line:O.line,column:O.column}}}return this.parseExpressionAtom()}parseAssignTag(O,E){let A=this.expect("ID").value;this.expect("EQUALS");let U=this.parseExpression();return this.expect("TAG_END"),{type:"Set",target:A,value:U,line:O,column:E}}parseCaptureTag(O,E){let A=this.expect("ID").value;this.expect("TAG_END");let U=this.parseNodes(["endcapture"]);return this.consumeTag("endcapture"),this.expect("TAG_END"),{type:"Set",targets:[A],value:{type:"Capture",body:U,line:O,column:E},line:O,column:E}}parseIncrementTag(O,E,A){let U=this.expect("ID").value;return this.expect("TAG_END"),{type:"Output",expression:{type:"FunctionCall",callee:{type:"Name",name:O,line:E,column:A},args:[{type:"Name",name:U,line:E,column:A}],kwargs:{},line:E,column:A},line:E,column:A}}parseIncludeTag(O,E){let A=this.parseExpressionAtom(),U={};if(this.checkKeyword("with")){this.advance();let B=this.parseExpressionAtom();U._=B}while(this.check("ID")||this.check("COMMA")){if(this.check("COMMA"))this.advance();if(!this.check("ID"))break;let B=this.advance().value;if(this.check("COLON"))this.advance(),U[B]=this.parseExpressionAtom()}return this.expect("TAG_END"),{type:"Include",template:A,context:Object.keys(U).length>0?U:void 0,line:O,column:E}}parseCommentTag(){while(!this.isAtEnd()){if(this.checkTag("endcomment")){this.consumeTag("endcomment"),this.expect("TAG_END");break}this.advance()}return null}parseRawTag(O,E){this.expect("TAG_END");let A="";while(!this.isAtEnd()){if(this.checkTag("endraw")){this.consumeTag("endraw"),this.expect("TAG_END");break}let U=this.advance();A+=U.value}return{type:"Text",value:A,line:O,column:E}}parseCondition(){return this.parseOr()}parseOr(){let O=this.parseAnd();while(this.check("OR")){this.advance();let E=this.parseAnd();O={type:"BinaryOp",operator:"or",left:O,right:E,line:O.line,column:O.column}}return O}parseAnd(){let O=this.parseComparison();while(this.check("AND")){this.advance();let E=this.parseComparison();O={type:"BinaryOp",operator:"and",left:O,right:E,line:O.line,column:O.column}}return O}parseComparison(){let O=this.parseExpressionAtom(),E={EQ:"==",NE:"!=",LT:"<",LE:"<=",GT:">",GE:">="},A=this.peek();if(E[A.type]){this.advance();let U=this.parseExpressionAtom();return{type:"Compare",left:O,ops:[{operator:E[A.type],right:U}],line:O.line,column:O.column}}if(this.check("CONTAINS")){this.advance();let U=this.parseExpressionAtom();return{type:"Test",node:O,test:"in",args:[U],line:O.line,column:O.column}}return O}parseExpression(){let O=this.parseExpressionAtom();while(this.check("PIPE")){this.advance();let E=this.expect("ID").value,A=[];if(this.check("COLON")){this.advance(),A.push(this.parseExpressionAtom());while(this.check("COMMA"))this.advance(),A.push(this.parseExpressionAtom())}O={type:"FilterExpr",node:O,filter:E,args:A,kwargs:{},line:O.line,column:O.column}}return O}parseExpressionAtom(){let O=this.peek();switch(O.type){case"STRING":return this.advance(),{type:"Literal",value:O.value,line:O.line,column:O.column};case"NUMBER":return this.advance(),{type:"Literal",value:parseFloat(O.value),line:O.line,column:O.column};case"ID":if(O.value==="true"||O.value==="false")return this.advance(),{type:"Literal",value:O.value==="true",line:O.line,column:O.column};if(O.value==="nil"||O.value==="null")return this.advance(),{type:"Literal",value:null,line:O.line,column:O.column};if(O.value==="empty"||O.value==="blank")return this.advance(),{type:"Literal",value:"",line:O.line,column:O.column};return this.parsePath();default:return this.advance(),{type:"Literal",value:null,line:O.line,column:O.column}}}parsePath(){let O=this.advance(),E={type:"Name",name:O.value,line:O.line,column:O.column};if(O.value==="forloop"){if(this.check("DOT")){if(this.advance(),this.check("ID")){let A=this.advance(),B={index:"counter",index0:"counter0",first:"first",last:"last",length:"length",rindex:"revcounter",rindex0:"revcounter0"}[A.value]||A.value;E={type:"GetAttr",object:E,attribute:B,line:A.line,column:A.column}}}return E}while(this.check("DOT")||this.check("LBRACKET"))if(this.check("DOT")){if(this.advance(),this.check("ID")){let A=this.advance();E={type:"GetAttr",object:E,attribute:A.value,line:A.line,column:A.column}}}else if(this.check("LBRACKET")){this.advance();let A=this.parseExpressionAtom();this.expect("RBRACKET"),E={type:"GetItem",object:E,index:A,line:A.line,column:A.column}}return E}checkTag(O){if(!this.check("TAG_START"))return!1;let E=this.tokens[this.current+1];return E?.type==="ID"&&E.value===O}consumeTag(O){this.expect("TAG_START"),this.expect("ID")}checkKeyword(O){return this.check("ID")&&this.peek().value===O}expectKeyword(O){if(!this.checkKeyword(O))throw Error(`Expected keyword '${O}' but got '${this.peek().value}'`);this.advance()}isAtEnd(){return this.current>=this.tokens.length||this.peek().type==="EOF"}peek(){return this.tokens[this.current]||{type:"EOF",value:"",line:1,column:1}}advance(){if(!this.isAtEnd())this.current++;return this.tokens[this.current-1]}check(O){return this.peek().type===O}expect(O){if(this.check(O))return this.advance();throw Error(`Expected ${O} but got ${this.peek().type}`)}}var jO=W(()=>{KO()});var CO={};o(CO,{render:()=>$E,parse:()=>NO,engine:()=>oB,compile:()=>HO,LiquidTokenType:()=>UO,LiquidParser:()=>r,LiquidLexer:()=>u});function NO(O){let A=new u(O).tokenize();return new r(A,O).parse()}function HO(O){let E=NO(O),{Runtime:A}=(f(),kO(DO)),U=new A;return async(B)=>{return U.render(E,B,O)}}async function $E(O,E={}){return HO(O)(E)}var oB;var SO=W(()=>{KO();jO();KO();jO();oB={name:"liquid",extensions:[".liquid"],parse:NO,compile:HO,render:$E}});var l;var wO=W(()=>{x();l=class l extends h{constructor(O){super(O)}}});var VO,n;var LO=W(()=>{e();VO={e:"escape",raw:"safe",nl2br:"linebreaksbr",number_format:"floatformat",striptags:"striptags",json_encode:"json",merge:"concat",keys:"list",column:"map"};n=class n extends b{constructor(O,E=""){super(O,E)}parse(){let O=super.parse();return this.transformTwigAST(O)}transformTwigAST(O){return{...O,body:O.body.map((E)=>this.transformNode(E))}}transformNode(O){if(!O||typeof O!=="object")return O;if(O.type==="Conditional")return{...O,test:this.transformNode(O.test),body:this.transformNode(O.body),else_:this.transformNode(O.else_)};if(O.type==="BinOp"&&O.operator==="??")return{type:"Conditional",test:{type:"Compare",left:this.transformNode(O.left),ops:[{operator:"isnot",right:{type:"Literal",value:null,line:O.line,column:O.column}}],line:O.line,column:O.column},body:this.transformNode(O.left),else_:this.transformNode(O.right),line:O.line,column:O.column};if(O.type==="FilterExpr"){let E=VO[O.filter]||O.filter;return{...O,filter:E,node:this.transformNode(O.node),args:O.args?.map((A)=>this.transformNode(A))||[]}}if(O.body)O.body=Array.isArray(O.body)?O.body.map((E)=>this.transformNode(E)):this.transformNode(O.body);if(O.else_)O.else_=Array.isArray(O.else_)?O.else_.map((E)=>this.transformNode(E)):this.transformNode(O.else_);if(O.expression)O.expression=this.transformNode(O.expression);if(O.test)O.test=this.transformNode(O.test);if(O.elifs)O.elifs=O.elifs.map((E)=>({...E,test:this.transformNode(E.test),body:E.body.map((A)=>this.transformNode(A))}));if(O.iter)O.iter=this.transformNode(O.iter);if(O.left)O.left=this.transformNode(O.left);if(O.right)O.right=this.transformNode(O.right);if(O.object)O.object=this.transformNode(O.object);if(O.operand)O.operand=this.transformNode(O.operand);if(O.args)O.args=O.args.map((E)=>this.transformNode(E));return O}}});var qO={};o(qO,{render:()=>JE,parse:()=>QO,engine:()=>aB,compile:()=>ZE,TwigParser:()=>n,TwigLexer:()=>l,TWIG_FILTER_MAP:()=>VO});function QO(O){let A=new l(O).tokenize();return new n(A,O).parse()}function ZE(O){let E=QO(O),A=new z;return async(U)=>A.render(E,U)}async function JE(O,E={}){let A=QO(O);return new z().render(A,E)}var aB;var hO=W(()=>{wO();LO();f();wO();LO();aB={name:"twig",extensions:[".twig",".html.twig"],parse:QO,compile:ZE,render:JE}});import{readFile as YE}from"fs/promises";import{join as XE,extname as bO}from"path";x();e();f();OO();EO();function eO(O,E={}){return new EE(E).compile(O)}function OE(O,E={}){let A=eO(O,E),U=Function("__ctx","__helpers",`
|
|
41
43
|
const { escape, isTruthy, toArray, applyFilter, applyTest } = __helpers;
|
|
42
44
|
${A}
|
|
43
45
|
return render(__ctx);
|
|
44
46
|
`);return(B)=>U(B,hB)}var hB={escape:(O)=>{if(O==null)return"";if(typeof O==="object"&&O.__safe)return String(O.value??"");if(O?.__safe__)return String(O);return Bun.escapeHTML(String(O))},isTruthy:(O)=>{if(O==null)return!1;if(typeof O==="boolean")return O;if(typeof O==="number")return O!==0;if(typeof O==="string")return O.length>0;if(Array.isArray(O))return O.length>0;if(typeof O==="object"){for(let E in O)return!0;return!1}return!0},toArray:(O)=>{if(O==null)return[];if(Array.isArray(O))return O;if(typeof O==="string")return O.split("");if(typeof O==="object"){if(typeof O[Symbol.iterator]==="function")return[...O];return Object.entries(O)}return[]},applyFilter:(O,E,...A)=>{let U=T[O];if(!U)throw Error(`Unknown filter: ${O}`);return U(E,...A)},applyTest:(O,E,...A)=>{let U=m[O];if(!U)throw Error(`Unknown test: ${O}`);return U(E,...A)}};class EE{options;indent=0;varCounter=0;loopStack=[];localVars=[];constructor(O={}){this.options={functionName:O.functionName??"render",inlineHelpers:O.inlineHelpers??!0,minify:O.minify??!1,autoescape:O.autoescape??!0}}pushScope(){this.localVars.push(new Set)}popScope(){this.localVars.pop()}addLocalVar(O){if(this.localVars.length>0)this.localVars[this.localVars.length-1].add(O)}isLocalVar(O){for(let E=this.localVars.length-1;E>=0;E--)if(this.localVars[E].has(O))return!0;return!1}compile(O){let E=this.compileNodes(O.body),A=this.options.minify?"":`
|
|
45
47
|
`;return`function ${this.options.functionName}(__ctx) {${A} let __out = '';${A}`+E+` return __out;${A}}`}compileNodes(O){return O.map((E)=>this.compileNode(E)).join("")}compileNode(O){switch(O.type){case"Text":return this.compileText(O);case"Output":return this.compileOutput(O);case"If":return this.compileIf(O);case"For":return this.compileFor(O);case"Set":return this.compileSet(O);case"With":return this.compileWith(O);case"Comment":return"";case"Extends":case"Block":case"Include":throw Error(`AOT compilation does not support '${O.type}' - use Environment.render() for templates with inheritance`);case"Url":case"Static":throw Error(`AOT compilation does not support '${O.type}' tag - use Environment.render() with urlResolver/staticResolver`);default:throw Error(`Unknown node type in AOT compiler: ${O.type}`)}}compileText(O){return` __out += ${JSON.stringify(O.value)};${this.nl()}`}compileOutput(O){let E=this.compileExpr(O.expression);if(this.options.autoescape&&!this.isMarkedSafe(O.expression))return` __out += escape(${E});${this.nl()}`;return` __out += (${E}) ?? '';${this.nl()}`}compileIf(O){let E="",A=this.compileExpr(O.test);E+=` if (isTruthy(${A})) {${this.nl()}`,E+=this.compileNodes(O.body),E+=" }";for(let U of O.elifs){let B=this.compileExpr(U.test);E+=` else if (isTruthy(${B})) {${this.nl()}`,E+=this.compileNodes(U.body),E+=" }"}if(O.else_.length>0)E+=` else {${this.nl()}`,E+=this.compileNodes(O.else_),E+=" }";return E+=this.nl(),E}compileFor(O){let E=this.genVar("iter"),A=this.genVar("i"),U=this.genVar("len"),B=this.genVar("loop"),Q=Array.isArray(O.target)?O.target[0]:O.target,J=Array.isArray(O.target)&&O.target[1]?O.target[1]:null,Z=this.loopStack.length>0?this.loopStack[this.loopStack.length-1]:null,K=this.compileExpr(O.iter),$="";if($+=` const ${E} = toArray(${K});${this.nl()}`,$+=` const ${U} = ${E}.length;${this.nl()}`,O.else_.length>0)$+=` if (${U} === 0) {${this.nl()}`,$+=this.compileNodes(O.else_),$+=` } else {${this.nl()}`;if($+=` for (let ${A} = 0; ${A} < ${U}; ${A}++) {${this.nl()}`,J)$+=` const ${Q} = ${E}[${A}][0];${this.nl()}`,$+=` const ${J} = ${E}[${A}][1];${this.nl()}`;else $+=` const ${Q} = ${E}[${A}];${this.nl()}`;if($+=` const ${B} = {${this.nl()}`,$+=` counter: ${A} + 1,${this.nl()}`,$+=` counter0: ${A},${this.nl()}`,$+=` revcounter: ${U} - ${A},${this.nl()}`,$+=` revcounter0: ${U} - ${A} - 1,${this.nl()}`,$+=` first: ${A} === 0,${this.nl()}`,$+=` last: ${A} === ${U} - 1,${this.nl()}`,$+=` length: ${U},${this.nl()}`,$+=` index: ${A} + 1,${this.nl()}`,$+=` index0: ${A},${this.nl()}`,Z)$+=` parentloop: ${Z},${this.nl()}`,$+=` parent: ${Z}${this.nl()}`;else $+=` parentloop: null,${this.nl()}`,$+=` parent: null${this.nl()}`;$+=` };${this.nl()}`,$+=` const forloop = ${B};${this.nl()}`,$+=` const loop = ${B};${this.nl()}`,this.loopStack.push(B);let Y=this.compileNodes(O.body);if($+=Y.replace(new RegExp(`__ctx\\.${Q}`,"g"),Q),this.loopStack.pop(),$+=` }${this.nl()}`,O.else_.length>0)$+=` }${this.nl()}`;return $}compileSet(O){let E=this.compileExpr(O.value);return` const ${O.target} = ${E};${this.nl()}`}compileWith(O){let E=` {${this.nl()}`;this.pushScope();for(let{target:A,value:U}of O.assignments){let B=this.compileExpr(U);E+=` const ${A} = ${B};${this.nl()}`,this.addLocalVar(A)}return E+=this.compileNodes(O.body),E+=` }${this.nl()}`,this.popScope(),E}compileExpr(O){switch(O.type){case"Name":return this.compileName(O);case"Literal":return this.compileLiteral(O);case"Array":return this.compileArray(O);case"Object":return this.compileObject(O);case"BinaryOp":return this.compileBinaryOp(O);case"UnaryOp":return this.compileUnaryOp(O);case"Compare":return this.compileCompare(O);case"GetAttr":return this.compileGetAttr(O);case"GetItem":return this.compileGetItem(O);case"FilterExpr":return this.compileFilter(O);case"TestExpr":return this.compileTest(O);case"Conditional":return this.compileConditional(O);default:return"undefined"}}compileName(O){if(O.name==="true"||O.name==="True")return"true";if(O.name==="false"||O.name==="False")return"false";if(O.name==="none"||O.name==="None"||O.name==="null")return"null";if(O.name==="forloop"||O.name==="loop")return O.name;if(this.isLocalVar(O.name))return O.name;return`__ctx.${O.name}`}compileLiteral(O){if(typeof O.value==="string")return JSON.stringify(O.value);return String(O.value)}compileArray(O){return`[${O.elements.map((A)=>this.compileExpr(A)).join(", ")}]`}compileObject(O){return`{${O.pairs.map(({key:A,value:U})=>{let B=this.compileExpr(A),Q=this.compileExpr(U);return`[${B}]: ${Q}`}).join(", ")}}`}compileBinaryOp(O){let E=this.compileExpr(O.left),A=this.compileExpr(O.right);switch(O.operator){case"and":return`(${E} && ${A})`;case"or":return`(${E} || ${A})`;case"~":return`(String(${E}) + String(${A}))`;case"in":return`(Array.isArray(${A}) ? ${A}.includes(${E}) : String(${A}).includes(String(${E})))`;case"not in":return`!(Array.isArray(${A}) ? ${A}.includes(${E}) : String(${A}).includes(String(${E})))`;default:return`(${E} ${O.operator} ${A})`}}compileUnaryOp(O){let E=this.compileExpr(O.operand);switch(O.operator){case"not":return`!isTruthy(${E})`;case"-":return`-(${E})`;case"+":return`+(${E})`;default:return E}}compileCompare(O){let E=this.compileExpr(O.left);for(let{operator:A,right:U}of O.ops){let B=this.compileExpr(U);switch(A){case"==":case"===":E=`(${E} === ${B})`;break;case"!=":case"!==":E=`(${E} !== ${B})`;break;default:E=`(${E} ${A} ${B})`}}return E}compileGetAttr(O){return`${this.compileExpr(O.object)}?.${O.attribute}`}compileGetItem(O){let E=this.compileExpr(O.object),A=this.compileExpr(O.index);return`${E}?.[${A}]`}compileFilter(O){let E=this.compileExpr(O.node),A=O.args.map((U)=>this.compileExpr(U));switch(O.filter){case"upper":return`String(${E}).toUpperCase()`;case"lower":return`String(${E}).toLowerCase()`;case"title":return`String(${E}).replace(/\\b\\w/g, c => c.toUpperCase())`;case"trim":return`String(${E}).trim()`;case"length":return`(${E}?.length ?? Object.keys(${E} ?? {}).length)`;case"first":return`(${E})?.[0]`;case"last":return`(${E})?.[(${E})?.length - 1]`;case"default":return`((${E}) ?? ${A[0]??'""'})`;case"safe":return`{ __safe: true, value: String(${E}) }`;case"escape":case"e":return`escape(${E})`;case"join":return`(${E} ?? []).join(${A[0]??'""'})`;case"abs":return`Math.abs(${E})`;case"round":return A.length?`Number(${E}).toFixed(${A[0]})`:`Math.round(${E})`;case"int":return`parseInt(${E}, 10)`;case"float":return`parseFloat(${E})`;case"floatformat":return`Number(${E}).toFixed(${A[0]??1})`;case"filesizeformat":return`applyFilter('filesizeformat', ${E})`;default:let U=A.length?", "+A.join(", "):"";return`applyFilter('${O.filter}', ${E}${U})`}}compileTest(O){let E=this.compileExpr(O.node),A=O.args.map((B)=>this.compileExpr(B)),U=O.negated?"!":"";switch(O.test){case"defined":return`${U}(${E} !== undefined)`;case"undefined":return`${U}(${E} === undefined)`;case"none":return`${U}(${E} === null)`;case"even":return`${U}(${E} % 2 === 0)`;case"odd":return`${U}(${E} % 2 !== 0)`;case"divisibleby":return`${U}(${E} % ${A[0]} === 0)`;case"empty":return`${U}((${E} == null) || (${E}.length === 0) || (Object.keys(${E}).length === 0))`;case"iterable":return`${U}(Array.isArray(${E}) || typeof ${E} === 'string')`;case"number":return`${U}(typeof ${E} === 'number' && !isNaN(${E}))`;case"string":return`${U}(typeof ${E} === 'string')`;default:let B=A.length?", "+A.join(", "):"";return`${U}applyTest('${O.test}', ${E}${B})`}}compileConditional(O){let E=this.compileExpr(O.test),A=this.compileExpr(O.trueExpr),U=this.compileExpr(O.falseExpr);return`(isTruthy(${E}) ? ${A} : ${U})`}isMarkedSafe(O){if(O.type==="FilterExpr")return O.filter==="safe";return!1}genVar(O){return`__${O}${this.varCounter++}`}nl(){return this.options.minify?"":`
|
|
46
|
-
`}}class
|
|
48
|
+
`}}class GO{data;constructor(){this.data={startTime:performance.now(),templateChain:[],mode:"runtime",isAsync:!1,contextKeys:[],contextSnapshot:{},filtersUsed:new Map,testsUsed:new Map,cacheHits:0,cacheMisses:0,queries:[],queryStats:{count:0,totalDuration:0,slowCount:0,n1Count:0,queryCounts:new Map},warnings:[]}}startLexer(){this.data._lexerStart=performance.now()}endLexer(){if(this.data._lexerStart)this.data.lexerTime=performance.now()-this.data._lexerStart}startParser(){this.data._parserStart=performance.now()}endParser(){if(this.data._parserStart)this.data.parserTime=performance.now()-this.data._parserStart}startRender(){this.data._renderStart=performance.now()}endRender(){if(this.data._renderStart)this.data.renderTime=performance.now()-this.data._renderStart;this.data.endTime=performance.now(),this.data.totalTime=this.data.endTime-this.data.startTime}addTemplate(O,E,A){if(this.data.templateChain.push({name:O,type:E,parent:A}),E==="root")this.data.rootTemplate=O}setMode(O){this.data.mode=O}setAsync(O){this.data.isAsync=O}captureContext(O){this.data.contextKeys=Object.keys(O);for(let[E,A]of Object.entries(O))this.data.contextSnapshot[E]=this.captureValue(A)}captureValue(O,E=0){let A=this.getType(O),U=this.getPreview(O),B=this.isExpandable(O),Q={type:A,preview:U,value:O,expandable:B};if(B&&E<3){if(Q.children={},Array.isArray(O))O.forEach((J,Z)=>{Q.children[String(Z)]=this.captureValue(J,E+1)});else if(typeof O==="object"&&O!==null)for(let[J,Z]of Object.entries(O))Q.children[J]=this.captureValue(Z,E+1)}return Q}isExpandable(O){if(O===null||O===void 0)return!1;if(Array.isArray(O))return O.length>0;if(typeof O==="object")return Object.keys(O).length>0;return!1}getType(O){if(O===null)return"null";if(O===void 0)return"undefined";if(Array.isArray(O))return`Array(${O.length})`;if(O instanceof Date)return"Date";if(typeof O==="object")return"Object";return typeof O}getPreview(O,E=50){if(O===null)return"null";if(O===void 0)return"undefined";if(typeof O==="string")return O.length>E?`"${O.slice(0,E)}..."`:`"${O}"`;if(typeof O==="number"||typeof O==="boolean")return String(O);if(Array.isArray(O)){if(O.length===0)return"[]";if(O.length<=3)return`[${O.map((U)=>this.getPreview(U,15)).join(", ")}]`;return`[${this.getPreview(O[0],15)}, ... +${O.length-1}]`}if(O instanceof Date)return O.toISOString();if(typeof O==="object"){let A=Object.keys(O);if(A.length===0)return"{}";if(A.length<=2)return`{ ${A.join(", ")} }`;return`{ ${A.slice(0,2).join(", ")}, ... +${A.length-2} }`}if(typeof O==="function")return"function()";return String(O)}recordFilter(O){this.data.filtersUsed.set(O,(this.data.filtersUsed.get(O)||0)+1)}recordTest(O){this.data.testsUsed.set(O,(this.data.testsUsed.get(O)||0)+1)}recordCacheHit(){this.data.cacheHits++}recordCacheMiss(){this.data.cacheMisses++}addWarning(O){this.data.warnings.push(O)}recordQuery(O){let E=this.normalizeQuery(O.sql),A=this.data.queryStats.queryCounts.get(E)||0;this.data.queryStats.queryCounts.set(E,A+1);let U=A>=2,B={...O,timestamp:performance.now(),isN1:U};if(this.data.queries.push(B),this.data.queryStats.count++,this.data.queryStats.totalDuration+=O.duration,O.duration>100)this.data.queryStats.slowCount++;if(U&&A===2)this.data.queryStats.n1Count++,this.addWarning(`N+1 query detected: ${E.slice(0,50)}...`)}normalizeQuery(O){return O.replace(/\s+/g," ").replace(/= \?/g,"= ?").replace(/= \$\d+/g,"= ?").replace(/= '\w+'/g,"= '?'").replace(/= \d+/g,"= ?").replace(/IN \([^)]+\)/gi,"IN (?)").trim()}getQueryStats(){return this.data.queryStats}getData(){return this.data}getSummary(){return{totalTime:this.data.totalTime||0,templateCount:this.data.templateChain.length,filterCount:this.data.filtersUsed.size,mode:this.data.mode}}}var v=null;function p(){return v=new GO,v}function c(){if(v){let O=v.getData();return v=null,O}return null}var bB={position:"bottom",height:300,width:400,open:!1,dark:!0};function s(O,E={}){let A={...bB,...E},U=`binja-dbg-${Date.now()}`,B=A.dark?fB:kB;return`
|
|
47
49
|
<!-- Binja Debug Panel -->
|
|
48
50
|
<div id="${U}" class="binja-devtools" data-position="${A.position}" data-open="${A.open}">
|
|
49
51
|
<style>${gB(U,B,A)}</style>
|
|
@@ -378,7 +380,7 @@ ${yB(U,O,B,A)}
|
|
|
378
380
|
document.body.style.cursor = '';
|
|
379
381
|
});
|
|
380
382
|
}
|
|
381
|
-
})();`}function w(O){return String(O).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}x();e();f();OO();y();EO();import*as UE from"path";var BE=/<[^>]+>|:[a-zA-Z_]+|\(\?P<[^>]+>\[[^\]]+\]\)/g;class
|
|
383
|
+
})();`}function w(O){return String(O).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}x();e();f();OO();y();EO();import*as UE from"path";var BE=/<[^>]+>|:[a-zA-Z_]+|\(\?P<[^>]+>\[[^\]]+\]\)/g;class PO{options;runtime;templateCache=new Map;routes=new Map;cacheHits=0;cacheMisses=0;constructor(O={}){this.options={templates:O.templates??"./templates",autoescape:O.autoescape??!0,filters:O.filters??{},globals:O.globals??{},urlResolver:O.urlResolver??this.defaultUrlResolver.bind(this),staticResolver:O.staticResolver??this.defaultStaticResolver.bind(this),cache:O.cache??!0,cacheMaxSize:O.cacheMaxSize??100,extensions:O.extensions??[".html",".jinja",".jinja2",""],debug:O.debug??!1,debugOptions:O.debugOptions??{},timezone:O.timezone??void 0},this.runtime=new z({autoescape:this.options.autoescape,filters:this.options.filters,globals:this.options.globals,urlResolver:this.options.urlResolver,staticResolver:this.options.staticResolver,templateLoader:this.loadTemplate.bind(this),timezone:this.options.timezone})}async render(O,E={}){if(this.options.debug)return this.renderWithDebug(O,E);let A=await this.loadTemplate(O);return this.runtime.render(A,E)}async renderString(O,E={}){if(this.options.debug)return this.renderStringWithDebug(O,E);let A=this.compile(O);return this.runtime.render(A,E)}async renderWithDebug(O,E){let A=p();A.captureContext(E),A.addTemplate(O,"root"),A.setMode("runtime"),A.startRender();let U=await this.loadTemplate(O),B=this.runtime.render(U,E);if(B&&typeof B.then==="function")B=await B;A.endRender();let Q=c();return this.injectDebugPanel(String(B||""),Q)}async renderStringWithDebug(O,E){let A=p();A.captureContext(E),A.setMode("runtime"),A.startRender();let U=this.compile(O),B=this.runtime.render(U,E);if(B&&typeof B.then==="function")B=await B;A.endRender();let Q=c();return this.injectDebugPanel(String(B||""),Q)}injectDebugPanel(O,E){if(!O||typeof O!=="string")return O||"";if(!(O.includes("<html")||O.includes("<body")||O.includes("<!DOCTYPE")))return O;let U=s(E,this.options.debugOptions);if(O.includes("</body>"))return O.replace("</body>",`${U}</body>`);return O+U}compile(O){let A=new h(O).tokenize();return new b(A,O).parse()}async loadTemplate(O){if(this.options.cache&&this.templateCache.has(O)){this.cacheHits++;let B=this.templateCache.get(O);return this.templateCache.delete(O),this.templateCache.set(O,B),B}this.cacheMisses++;let E=await this.resolveTemplatePath(O);if(!E)throw Error(`Template not found: ${O}`);let A=await Bun.file(E).text(),U=this.compile(A);if(this.options.cache){while(this.templateCache.size>=this.options.cacheMaxSize){let B=this.templateCache.keys().next().value;if(B)this.templateCache.delete(B)}this.templateCache.set(O,U)}return U}clearCache(){this.templateCache.clear(),this.cacheHits=0,this.cacheMisses=0}cacheSize(){return this.templateCache.size}cacheStats(){let O=this.cacheHits+this.cacheMisses;return{size:this.templateCache.size,maxSize:this.options.cacheMaxSize,hits:this.cacheHits,misses:this.cacheMisses,hitRate:O>0?this.cacheHits/O*100:0}}addFilter(O,E){this.runtime.addFilter(O,E)}addGlobal(O,E){this.runtime.addGlobal(O,E)}addUrl(O,E){this.routes.set(O,E)}addUrls(O){for(let[E,A]of Object.entries(O))this.routes.set(E,A)}async resolveTemplatePath(O){let E=UE.resolve(this.options.templates,O);for(let A of this.options.extensions){let U=E+A;if(await Bun.file(U).exists())return U}return null}defaultUrlResolver(O,E,A){let U=this.routes.get(O);if(!U)return console.warn(`URL pattern not found: ${O}`),`#${O}`;let B=U;for(let J in A){let Z=encodeURIComponent(String(A[J]));B=B.replaceAll(`:${J}`,Z),B=B.replaceAll(`<${J}>`,Z),B=B.replaceAll(`(?P<${J}>[^/]+)`,Z)}let Q=0;return BE.lastIndex=0,B=B.replace(BE,()=>{if(Q<E.length)return encodeURIComponent(String(E[Q++]));return""}),B}defaultStaticResolver(O){return`/static/${O}`}}function KE(O,E={}){let U=new h(O).tokenize(),Q=new b(U,O).parse();return OE(Q,E)}var k=new Map;function tB(O={}){let{root:E="./views",extension:A=".html",engine:U="jinja2",debug:B=!1,cache:Q=!1,globals:J={},layout:Z,contentVar:K="content"}=O,$=new PO({debug:B}),Y=async(X)=>{switch(X){case"handlebars":return(await Promise.resolve().then(() => (_O(),WO))).render;case"liquid":return(await Promise.resolve().then(() => (SO(),CO))).render;case"twig":return(await Promise.resolve().then(() => (hO(),qO))).render;default:return(I,D)=>$.renderString(I,D)}};return async(X,I)=>{X.setRenderer(async(D,M={})=>{try{let R=bO(D)||A,_=bO(D)?D:`${D}${R}`,H=XE(E,_),$O=`${U}:${H}`,G;if(Q&&k.has($O))G=await k.get($O)({...J,...M});else{let C=await YE(H,"utf-8"),ZO=await Y(U);if(Q){let V;switch(U){case"handlebars":{let{compile:L}=await Promise.resolve().then(() => (_O(),WO)),q=L(C);V=async(g)=>q(g);break}case"liquid":{let{compile:L}=await Promise.resolve().then(() => (SO(),CO)),q=L(C);V=async(g)=>q(g);break}case"twig":{let{compile:L}=await Promise.resolve().then(() => (hO(),qO)),q=L(C);V=async(g)=>q(g);break}default:{let L=KE(C);V=async(q)=>L(q)}}k.set($O,V),G=await V({...J,...M})}else G=await ZO(C,{...J,...M})}if(Z){let C=XE(E,bO(Z)?Z:`${Z}${A}`),ZO=await YE(C,"utf-8");G=await(await Y(U))(ZO,{...J,...M,[K]:G})}return X.html(G)}catch(R){let _=R;if(console.error(`[binja] Template error: ${_.message}`),B)return X.html(`
|
|
382
384
|
<html>
|
|
383
385
|
<head><title>Template Error</title></head>
|
|
384
386
|
<body style="font-family: monospace; padding: 20px;">
|