binja 0.9.0 → 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 +231 -18
- package/dist/adapters/elysia.js +12 -10
- package/dist/adapters/hono.js +13 -11
- package/dist/ai/index.d.ts +24 -0
- package/dist/ai/index.js +115 -0
- package/dist/ai/lint.d.ts +26 -0
- package/dist/ai/prompt.d.ts +10 -0
- package/dist/ai/providers/anthropic.d.ts +6 -0
- package/dist/ai/providers/groq.d.ts +6 -0
- package/dist/ai/providers/index.d.ts +22 -0
- package/dist/ai/providers/ollama.d.ts +6 -0
- package/dist/ai/providers/openai.d.ts +6 -0
- package/dist/ai/types.d.ts +42 -0
- package/dist/cli.js +185 -30
- package/dist/index.js +4 -2
- package/dist/lexer/index.d.ts +10 -0
- package/package.json +22 -2
package/dist/adapters/elysia.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var{defineProperty:ZO,getOwnPropertyNames:XE,getOwnPropertyDescriptor:IE}=Object,ME=Object.prototype.hasOwnProperty;var bO=new WeakMap,fO=(O)=>{var E=bO.get(O),A;if(E)return E;if(E=ZO({},"__esModule",{value:!0}),O&&typeof O==="object"||typeof O==="function")XE(O).map((U)=>!ME.call(E,U)&&ZO(E,U,{get:()=>O[U],enumerable:!(A=IE(O,U))||A.enumerable}));return bO.set(O,E),E};var o=(O,E)=>{for(var A in E)ZO(O,A,{get:E[A],enumerable:!0,configurable:!0,set:(U)=>E[A]=()=>U})};var R=(O,E)=>()=>(O&&(E=O(O=0)),E);var JO;var YO=R(()=>{JO={and:"AND",or:"OR",not:"NOT",true:"NAME",false:"NAME",True:"NAME",False:"NAME",None:"NAME",none:"NAME",is:"NAME",in:"NAME"}});function _(O,E){return DE?`${kO[O]}${E}${kO.reset}`:E}function gO(O,E,A){let U=[],B=A.templateName?`${A.templateName}:${A.line}:${A.column}`:`line ${A.line}, column ${A.column}`;if(U.push(`${_("red",_("bold",O))}: ${E} at ${_("cyan",B)}`),A.source)U.push(""),U.push(
|
|
3
|
-
`)}function
|
|
2
|
+
var{defineProperty:ZO,getOwnPropertyNames:XE,getOwnPropertyDescriptor:IE}=Object,ME=Object.prototype.hasOwnProperty;var bO=new WeakMap,fO=(O)=>{var E=bO.get(O),A;if(E)return E;if(E=ZO({},"__esModule",{value:!0}),O&&typeof O==="object"||typeof O==="function")XE(O).map((U)=>!ME.call(E,U)&&ZO(E,U,{get:()=>O[U],enumerable:!(A=IE(O,U))||A.enumerable}));return bO.set(O,E),E};var o=(O,E)=>{for(var A in E)ZO(O,A,{get:E[A],enumerable:!0,configurable:!0,set:(U)=>E[A]=()=>U})};var R=(O,E)=>()=>(O&&(E=O(O=0)),E);var JO;var YO=R(()=>{JO={and:"AND",or:"OR",not:"NOT",true:"NAME",false:"NAME",True:"NAME",False:"NAME",None:"NAME",none:"NAME",is:"NAME",in:"NAME"}});function _(O,E){return DE?`${kO[O]}${E}${kO.reset}`:E}function gO(O,E,A){let U=[],B=A.templateName?`${A.templateName}:${A.line}:${A.column}`:`line ${A.line}, column ${A.column}`;if(U.push(`${_("red",_("bold",O))}: ${E} at ${_("cyan",B)}`),A.source)U.push(""),U.push(GE(A.source,A.line,A.column));if(A.suggestion)U.push(""),U.push(`${_("yellow","Did you mean")}: ${_("cyan",A.suggestion)}?`);if(A.availableOptions&&A.availableOptions.length>0){U.push("");let Q=A.availableOptions.slice(0,8),J=A.availableOptions.length>8?` ${_("gray",`... and ${A.availableOptions.length-8} more`)}`:"";U.push(`${_("gray","Available")}: ${Q.join(", ")}${J}`)}return U.join(`
|
|
3
|
+
`)}function GE(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(`${_("red"," \u2192")} ${_("gray",Y)} ${_("dim","\u2502")} ${$}`);let I=" ".repeat(Z+4+Math.max(0,A-1)),D=_("red","^");B.push(`${I}${D}`)}else B.push(` ${_("gray",Y)} ${_("dim","\u2502")} ${_("gray",$)}`)}return B.join(`
|
|
5
|
-
`)}function yO(O,E,A=3){let U=null,B=A+1,Q=O.toLowerCase();for(let J of E){let Z=
|
|
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 yO(O,E,A=3){let U=null,B=A+1,Q=O.toLowerCase();for(let J of E){let Z=PE(Q,J.toLowerCase());if(Z<B)B=Z,U=J}return B<=A?U:null}function PE(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 kO,DE,N,a;var y=R(()=>{kO={red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",gray:"\x1B[90m",bold:"\x1B[1m",dim:"\x1B[2m",reset:"\x1B[0m"},DE=process.stdout?.isTTY!==!1;N=class N extends Error{line;column;source;templateName;suggestion;constructor(O,E){let A=gO("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=gO("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 q{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=JO[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=R(()=>{YO();y();YO()});class h{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=R(()=>{x();y()});function FE(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 C{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 C(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=FE(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 zE,RE,WE,_E,jE,vO,NE,HE,pO,cO,CE,SE,wE,VE,LE,qE=(O)=>String(O).toUpperCase(),hE=(O)=>String(O).toLowerCase(),bE=(O)=>{let E=String(O);return E.charAt(0).toUpperCase()+E.slice(1).toLowerCase()},fE=(O)=>{let E=String(O);return E.charAt(0).toUpperCase()+E.slice(1)},kE=(O)=>String(O).replace(zE,(E)=>E.toUpperCase()),gE=(O)=>String(O).trim(),yE=(O)=>String(O).replace(RE,""),xO=(O)=>{if(O?.__safe__)return O;let E=Bun.escapeHTML(String(O)),A=new String(E);return A.__safe__=!0,A},xE=(O)=>{let E=new String(O);return E.__safe__=!0,E},TE=(O)=>JSON.stringify(String(O)).slice(1,-1),mE=(O)=>{let A=String(O).split(HE),U="";for(let Q=0;Q<A.length;Q++){if(Q>0)U+=`
|
|
12
|
-
`;U+=`<p>${A[Q].replace(pO,"<br>")}</p>`}let B=new String(U);return B.__safe__=!0,B},vE=(O)=>{let E=String(O).replace(pO,"<br>"),A=new String(E);return A.__safe__=!0,A},pE=(O,E=30)=>{let A=String(O);if(A.length<=E)return A;return A.slice(0,E-3)+"..."},cE=(O,E=15)=>{let A=String(O).split(cO);if(A.length<=E)return O;return A.slice(0,E).join(" ")+"..."},sE=(O)=>String(O).split(cO).filter(Boolean).length,iE=(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)},dE=(O,E=80)=>String(O).padEnd(E),uE=(O,E=80)=>String(O).padStart(E),rE=(O,E="")=>String(O).split(E).join(""),lE=(O)=>String(O).toLowerCase().replace(WE,"").replace(_E,"-").replace(jE,""),nE=(O)=>Math.abs(Number(O)),oE=(O,E=0)=>Number(Number(O).toFixed(E)),aE=(O)=>parseInt(String(O),10)||0,tE=(O)=>parseFloat(String(O))||0,eE=(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))},OA=(O,E)=>{let A=Number(O),U=Number(E);if(!isNaN(A)&&!isNaN(U))return A+U;return String(O)+String(E)},EA=(O,E)=>Number(O)%Number(E)===0,AA=(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]}`},sO=(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},BA=(O,E)=>sO(O)===Number(E),UA=(O)=>{if(Array.isArray(O))return O[0];if(typeof O==="string")return O[0];return O},KA=(O)=>{if(Array.isArray(O))return O[O.length-1];if(typeof O==="string")return O[O.length-1];return O},QA=(O,E="")=>{if(Array.isArray(O))return O.join(E);return String(O)},$A=(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},ZA=(O)=>{if(Array.isArray(O))return[...O].reverse();if(typeof O==="string")return O.split("").reverse().join("");return O},JA=(O,E=!1)=>{if(!Array.isArray(O))return O;let A=[...O].sort();return E?A.reverse():A},YA=(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},XA=(O)=>{if(Array.isArray(O))return O;return String(O).split("")},iO=(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})},IA=(O,E)=>{let A=iO(O,E);return Array.isArray(A)?A.reverse():A},MA=(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},DA=(O,E)=>{switch(E){case"d":return String(O.getDate()).padStart(2,"0");case"j":return String(O.getDate());case"D":return CE[O.getDay()];case"l":return SE[O.getDay()];case"m":return String(O.getMonth()+1).padStart(2,"0");case"n":return String(O.getMonth()+1);case"M":return wE[O.getMonth()];case"F":return VE[O.getMonth()];case"N":return LE[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}},dO=(O,E="N j, Y")=>{let A=O instanceof Date?O:new Date(O);if(isNaN(A.getTime()))return"";return E.replace(NE,(U)=>DA(A,U))},
|
|
14
|
+
`;U+=`<p>${A[Q].replace(pO,"<br>")}</p>`}let B=new String(U);return B.__safe__=!0,B},vE=(O)=>{let E=String(O).replace(pO,"<br>"),A=new String(E);return A.__safe__=!0,A},pE=(O,E=30)=>{let A=String(O);if(A.length<=E)return A;return A.slice(0,E-3)+"..."},cE=(O,E=15)=>{let A=String(O).split(cO);if(A.length<=E)return O;return A.slice(0,E).join(" ")+"..."},sE=(O)=>String(O).split(cO).filter(Boolean).length,iE=(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)},dE=(O,E=80)=>String(O).padEnd(E),uE=(O,E=80)=>String(O).padStart(E),rE=(O,E="")=>String(O).split(E).join(""),lE=(O)=>String(O).toLowerCase().replace(WE,"").replace(_E,"-").replace(jE,""),nE=(O)=>Math.abs(Number(O)),oE=(O,E=0)=>Number(Number(O).toFixed(E)),aE=(O)=>parseInt(String(O),10)||0,tE=(O)=>parseFloat(String(O))||0,eE=(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))},OA=(O,E)=>{let A=Number(O),U=Number(E);if(!isNaN(A)&&!isNaN(U))return A+U;return String(O)+String(E)},EA=(O,E)=>Number(O)%Number(E)===0,AA=(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]}`},sO=(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},BA=(O,E)=>sO(O)===Number(E),UA=(O)=>{if(Array.isArray(O))return O[0];if(typeof O==="string")return O[0];return O},KA=(O)=>{if(Array.isArray(O))return O[O.length-1];if(typeof O==="string")return O[O.length-1];return O},QA=(O,E="")=>{if(Array.isArray(O))return O.join(E);return String(O)},$A=(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},ZA=(O)=>{if(Array.isArray(O))return[...O].reverse();if(typeof O==="string")return O.split("").reverse().join("");return O},JA=(O,E=!1)=>{if(!Array.isArray(O))return O;let A=[...O].sort();return E?A.reverse():A},YA=(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},XA=(O)=>{if(Array.isArray(O))return O;return String(O).split("")},iO=(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})},IA=(O,E)=>{let A=iO(O,E);return Array.isArray(A)?A.reverse():A},MA=(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},DA=(O,E)=>{switch(E){case"d":return String(O.getDate()).padStart(2,"0");case"j":return String(O.getDate());case"D":return CE[O.getDay()];case"l":return SE[O.getDay()];case"m":return String(O.getMonth()+1).padStart(2,"0");case"n":return String(O.getMonth()+1);case"M":return wE[O.getMonth()];case"F":return VE[O.getMonth()];case"N":return LE[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}},dO=(O,E="N j, Y")=>{let A=O instanceof Date?O:new Date(O);if(isNaN(A.getTime()))return"";return E.replace(NE,(U)=>DA(A,U))},GA=(O,E="H:i")=>dO(O,E),PA=(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"},FA=(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"},TO=(O,E="")=>{if(O===void 0||O===null||O===""||O===!1)return E;return O},zA=(O,E="")=>O===null||O===void 0?E:O,RA=(O,E="yes,no,maybe")=>{let[A,U,B]=E.split(",");if(O===!0)return A;if(O===!1)return U;return B??U},WA=(O,E="s")=>{let[A,U]=E.includes(",")?E.split(","):["",E];return Number(O)===1?A:U},_A=(O)=>encodeURIComponent(String(O)),jA=(O)=>{let E=String(O).replace(vO,'<a href="$1">$1</a>'),A=new String(E);return A.__safe__=!0,A},mO=(O,E)=>{try{let A=JSON.stringify(O,null,E),U=new String(A);return U.__safe__=!0,U}catch{return""}},NA=(O)=>{if(Array.isArray(O))return O[Math.floor(Math.random()*O.length)];return O},HA=(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},CA=(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},SA=(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)},wA=(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},VA=(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},LA=(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},qA=(O)=>String(O),hA=(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]},bA=(O,E)=>{if(!Array.isArray(O))return[];if(typeof E==="string")return O.map((A)=>A?.[E]);return O},fA=(O,E)=>{if(!Array.isArray(O))return[];if(E===void 0)return O.filter((A)=>!!A);return O.filter((A)=>!!A?.[E])},kA=(O,E)=>{if(!Array.isArray(O))return[];if(E===void 0)return O.filter((A)=>!A);return O.filter((A)=>!A?.[E])},uO=(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})},gA=(O,E,A,U)=>{if(!Array.isArray(O))return[];let B=uO(O,E,A,U);return O.filter((Q)=>!B.includes(Q))},yA=(O,E)=>{if(O==null)return;return O[E]},xA=(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},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=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},vA=(O)=>{try{let E=JSON.stringify(O,null,2),A=new String(E);return A.__safe__=!0,A}catch{return String(O)}},pA=(O)=>{let E=Bun.escapeHTML(String(O)),A=new String(E);return A.__safe__=!0,A},cA,sA=(O)=>{let E=String(O).toLowerCase(),A=E.length,U=Array(A);for(let B=0;B<A;B++)U[B]=cA[E[B]]??E[B];return U.join("")},iA=(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},uA=(O)=>{let E=String(O).replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/"/g,"\\\""),A=new String(E);return A.__safe__=!0,A},rA=(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)},lA=(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")},nA=(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},oA=(O)=>{if(!Array.isArray(O))return O;return O.map((E)=>{let A=new String(E);return A.__safe__=!0,A})},aA=(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)},tA=(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},eA=(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(),W=K.lastIndexOf(M);if(W!==-1)K.splice(W,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,$},OB=(O,E=15)=>{let A=Number(E),U=String(O).replace(vO,(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},EB=(O)=>{if(O==null||typeof O!=="object")return[];return Object.entries(O)},AB=(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=R(()=>{zE=/\b\w/g,RE=/<[^>]*>/g,WE=/[^\w\s-]/g,_E=/[\s_-]+/g,jE=/^-+|-+$/g,vO=/(https?:\/\/[^\s]+)/g,NE=/[a-zA-Z]/g,HE=/\n\n+/,pO=/\n/g,cO=/\s+/,CE=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SE=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],wE=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],VE=["January","February","March","April","May","June","July","August","September","October","November","December"],LE=["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."],cA={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:qE,lower:hE,capitalize:bE,capfirst:fE,title:kE,trim:gE,striptags:yE,escape:xO,e:xO,safe:xE,escapejs:TE,linebreaks:mE,linebreaksbr:vE,truncatechars:pE,truncatewords:cE,wordcount:sE,center:iE,ljust:dE,rjust:uE,cut:rE,slugify:lE,abs:nE,round:oE,int:aE,float:tE,floatformat:eE,add:OA,divisibleby:EA,filesizeformat:AA,length:sO,length_is:BA,first:UA,last:KA,join:QA,slice:$A,reverse:ZA,sort:JA,unique:YA,make_list:XA,dictsort:iO,dictsortreversed:IA,columns:MA,date:dO,time:PA,timesince:GA,timeuntil:FA,default:TO,d:TO,default_if_none:zA,yesno:RA,pluralize:WA,urlencode:_A,urlize:jA,json:mO,tojson:mO,random:NA,batch:HA,groupby:CA,wordwrap:SA,indent:wA,replace:VA,format:LA,string:qA,list:hA,map:bA,select:fA,reject:kA,selectattr:uO,rejectattr:gA,attr:yA,max:xA,min:TA,sum:mA,pprint:vA,forceescape:pA,phone2numeric:sA,linenumbers:iA,unordered_list:dA,addslashes:uA,get_digit:rA,iriencode:lA,json_script:nA,safeseq:oA,stringformat:aA,truncatechars_html:tA,truncatewords_html:eA,urlizetrunc:OB,items:EB,xmlattr:AB}});var BB=(O,E)=>{let A=Number(O),U=Number(E);if(U===0)return!1;return A%U===0},UB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2===0},KB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2!==0},QB=(O)=>{return typeof O==="number"&&!isNaN(O)},$B=(O)=>{return Number.isInteger(O)},ZB=(O)=>{return typeof O==="number"&&!Number.isInteger(O)&&!isNaN(O)},lO=(O,E)=>Number(O)>Number(E),JB=(O,E)=>Number(O)>=Number(E),nO=(O,E)=>Number(O)<Number(E),YB=(O,E)=>Number(O)<=Number(E),XB,IB,MB=(O)=>{return O!==IO},IO=(O)=>{return O===IO},rO=(O)=>{return O===null},DB=(O)=>{return typeof O==="boolean"},PB=(O)=>{return typeof O==="string"},GB=(O)=>{return O!==null&&typeof O==="object"&&!Array.isArray(O)&&!(O instanceof Date)},FB=(O)=>{if(O==null)return!1;return typeof O==="string"||Array.isArray(O)||typeof O[Symbol.iterator]==="function"},zB=(O)=>{return Array.isArray(O)||typeof O==="string"},RB=(O)=>{return typeof O==="function"},WB=(O)=>{if(typeof O!=="string")return!1;return O===O.toLowerCase()&&O!==O.toUpperCase()},_B=(O)=>{if(typeof O!=="string")return!1;return O===O.toUpperCase()&&O!==O.toLowerCase()},jB=(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},NB=(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},oO=(O,E)=>O===E,HB=(O,E)=>O!==E,CB=(O,E)=>O===E,SB,aO=(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},wB=(O)=>!aO(O),VB=(O)=>O===!0,LB=(O)=>O===!1,m;var EO=R(()=>{XB=lO,IB=nO,SB=oO,m={divisibleby:BB,even:UB,odd:KB,number:QB,integer:$B,float:ZB,gt:lO,ge:JB,lt:nO,le:YB,greaterthan:XB,lessthan:IB,defined:MB,undefined:IO,none:rO,None:rO,boolean:DB,string:PB,mapping:GB,iterable:FB,sequence:zB,callable:RB,lower:WB,upper:_B,empty:jB,in:NB,eq:oO,ne:HB,sameas:CB,equalto:SB,truthy:aO,falsy:wB,true:VB,false:LB}});var MO={};o(MO,{Runtime:()=>z,Context:()=>C});var z;var f=R(()=>{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 C({...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},uA=(O)=>{let E=String(O).replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/"/g,"\\\""),A=new String(E);return A.__safe__=!0,A},rA=(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)},lA=(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")},nA=(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},oA=(O)=>{if(!Array.isArray(O))return O;return O.map((E)=>{let A=new String(E);return A.__safe__=!0,A})},aA=(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)},tA=(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},eA=(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(),W=K.lastIndexOf(M);if(W!==-1)K.splice(W,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,$},OB=(O,E=15)=>{let A=Number(E),U=String(O).replace(vO,(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},EB=(O)=>{if(O==null||typeof O!=="object")return[];return Object.entries(O)},AB=(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=R(()=>{zE=/\b\w/g,RE=/<[^>]*>/g,WE=/[^\w\s-]/g,_E=/[\s_-]+/g,jE=/^-+|-+$/g,vO=/(https?:\/\/[^\s]+)/g,NE=/[a-zA-Z]/g,HE=/\n\n+/,pO=/\n/g,cO=/\s+/,CE=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SE=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],wE=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],VE=["January","February","March","April","May","June","July","August","September","October","November","December"],LE=["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."],cA={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:qE,lower:hE,capitalize:bE,capfirst:fE,title:kE,trim:gE,striptags:yE,escape:xO,e:xO,safe:xE,escapejs:TE,linebreaks:mE,linebreaksbr:vE,truncatechars:pE,truncatewords:cE,wordcount:sE,center:iE,ljust:dE,rjust:uE,cut:rE,slugify:lE,abs:nE,round:oE,int:aE,float:tE,floatformat:eE,add:OA,divisibleby:EA,filesizeformat:AA,length:sO,length_is:BA,first:UA,last:KA,join:QA,slice:$A,reverse:ZA,sort:JA,unique:YA,make_list:XA,dictsort:iO,dictsortreversed:IA,columns:MA,date:dO,time:GA,timesince:PA,timeuntil:FA,default:TO,d:TO,default_if_none:zA,yesno:RA,pluralize:WA,urlencode:_A,urlize:jA,json:mO,tojson:mO,random:NA,batch:HA,groupby:CA,wordwrap:SA,indent:wA,replace:VA,format:LA,string:qA,list:hA,map:bA,select:fA,reject:kA,selectattr:uO,rejectattr:gA,attr:yA,max:xA,min:TA,sum:mA,pprint:vA,forceescape:pA,phone2numeric:sA,linenumbers:iA,unordered_list:dA,addslashes:uA,get_digit:rA,iriencode:lA,json_script:nA,safeseq:oA,stringformat:aA,truncatechars_html:tA,truncatewords_html:eA,urlizetrunc:OB,items:EB,xmlattr:AB}});var BB=(O,E)=>{let A=Number(O),U=Number(E);if(U===0)return!1;return A%U===0},UB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2===0},KB=(O)=>{let E=Number(O);return Number.isInteger(E)&&E%2!==0},QB=(O)=>{return typeof O==="number"&&!isNaN(O)},$B=(O)=>{return Number.isInteger(O)},ZB=(O)=>{return typeof O==="number"&&!Number.isInteger(O)&&!isNaN(O)},lO=(O,E)=>Number(O)>Number(E),JB=(O,E)=>Number(O)>=Number(E),nO=(O,E)=>Number(O)<Number(E),YB=(O,E)=>Number(O)<=Number(E),XB,IB,MB=(O)=>{return O!==IO},IO=(O)=>{return O===IO},rO=(O)=>{return O===null},DB=(O)=>{return typeof O==="boolean"},GB=(O)=>{return typeof O==="string"},PB=(O)=>{return O!==null&&typeof O==="object"&&!Array.isArray(O)&&!(O instanceof Date)},FB=(O)=>{if(O==null)return!1;return typeof O==="string"||Array.isArray(O)||typeof O[Symbol.iterator]==="function"},zB=(O)=>{return Array.isArray(O)||typeof O==="string"},RB=(O)=>{return typeof O==="function"},WB=(O)=>{if(typeof O!=="string")return!1;return O===O.toLowerCase()&&O!==O.toUpperCase()},_B=(O)=>{if(typeof O!=="string")return!1;return O===O.toUpperCase()&&O!==O.toLowerCase()},jB=(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},NB=(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},oO=(O,E)=>O===E,HB=(O,E)=>O!==E,CB=(O,E)=>O===E,SB,aO=(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},wB=(O)=>!aO(O),VB=(O)=>O===!0,LB=(O)=>O===!1,m;var EO=R(()=>{XB=lO,IB=nO,SB=oO,m={divisibleby:BB,even:UB,odd:KB,number:QB,integer:$B,float:ZB,gt:lO,ge:JB,lt:nO,le:YB,greaterthan:XB,lessthan:IB,defined:MB,undefined:IO,none:rO,None:rO,boolean:DB,string:GB,mapping:PB,iterable:FB,sequence:zB,callable:RB,lower:WB,upper:_B,empty:jB,in:NB,eq:oO,ne:HB,sameas:CB,equalto:SB,truthy:aO,falsy:wB,true:VB,false:LB}});var MO={};o(MO,{Runtime:()=>z,Context:()=>C});var z;var f=R(()=>{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 C({...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 W=0;W<E.length;W++){let H=E[W];switch(H){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+=H}}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,12 +34,12 @@ ${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=R(()=>{((
|
|
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=R(()=>{((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 PO=R(()=>{BO()});var RO={};o(RO,{render:()=>KE,parse:()=>FO,engine:()=>lB,compile:()=>zO,HbsTokenType:()=>AO,HandlebarsParser:()=>d,HandlebarsLexer:()=>i});function FO(O){let A=new i(O).tokenize();return new d(A,O).parse()}function zO(O){let E=FO(O),{Runtime:A}=(f(),fO(MO)),U=new A;return async(B)=>{return U.render(E,B,O)}}async function KE(O,E={}){return zO(O)(E)}var lB;var WO=R(()=>{BO();PO();BO();PO();lB={name:"handlebars",extensions:[".hbs",".handlebars"],parse:FO,compile:zO,render:KE}});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=R(()=>{((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 _O=R(()=>{KO()});var HO={};o(HO,{render:()=>QE,parse:()=>jO,engine:()=>nB,compile:()=>NO,LiquidTokenType:()=>UO,LiquidParser:()=>r,LiquidLexer:()=>u});function jO(O){let A=new u(O).tokenize();return new r(A,O).parse()}function NO(O){let E=jO(O),{Runtime:A}=(f(),fO(MO)),U=new A;return async(B)=>{return U.render(E,B,O)}}async function QE(O,E={}){return NO(O)(E)}var nB;var CO=R(()=>{KO();_O();KO();_O();nB={name:"liquid",extensions:[".liquid"],parse:jO,compile:NO,render:QE}});var l;var SO=R(()=>{x();l=class l extends q{constructor(O){super(O)}}});var wO,n;var VO=R(()=>{e();wO={e:"escape",raw:"safe",nl2br:"linebreaksbr",number_format:"floatformat",striptags:"striptags",json_encode:"json",merge:"concat",keys:"list",column:"map"};n=class n extends h{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=wO[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 LO={};o(LO,{render:()=>ZE,parse:()=>QO,engine:()=>oB,compile:()=>$E,TwigParser:()=>n,TwigLexer:()=>l,TWIG_FILTER_MAP:()=>wO});function QO(O){let A=new l(O).tokenize();return new n(A,O).parse()}function $E(O){let E=QO(O),A=new z;return async(U)=>A.render(E,U)}async function ZE(O,E={}){let A=QO(O);return new z().render(A,E)}var oB;var qO=R(()=>{SO();VO();f();SO();VO();oB={name:"twig",extensions:[".twig",".html.twig"],parse:QO,compile:$E,render:ZE}});import{readFile as JE}from"fs/promises";import{join as YE,extname as hO}from"path";x();e();f();OO();EO();function tO(O,E={}){return new OE(E).compile(O)}function eO(O,E={}){let A=tO(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=R(()=>{((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 _O=R(()=>{KO()});var HO={};o(HO,{render:()=>QE,parse:()=>jO,engine:()=>nB,compile:()=>NO,LiquidTokenType:()=>UO,LiquidParser:()=>r,LiquidLexer:()=>u});function jO(O){let A=new u(O).tokenize();return new r(A,O).parse()}function NO(O){let E=jO(O),{Runtime:A}=(f(),fO(MO)),U=new A;return async(B)=>{return U.render(E,B,O)}}async function QE(O,E={}){return NO(O)(E)}var nB;var CO=R(()=>{KO();_O();KO();_O();nB={name:"liquid",extensions:[".liquid"],parse:jO,compile:NO,render:QE}});var l;var SO=R(()=>{x();l=class l extends q{constructor(O){super(O)}}});var wO,n;var VO=R(()=>{e();wO={e:"escape",raw:"safe",nl2br:"linebreaksbr",number_format:"floatformat",striptags:"striptags",json_encode:"json",merge:"concat",keys:"list",column:"map"};n=class n extends h{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=wO[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 LO={};o(LO,{render:()=>ZE,parse:()=>QO,engine:()=>oB,compile:()=>$E,TwigParser:()=>n,TwigLexer:()=>l,TWIG_FILTER_MAP:()=>wO});function QO(O){let A=new l(O).tokenize();return new n(A,O).parse()}function $E(O){let E=QO(O),A=new z;return async(U)=>A.render(E,U)}async function ZE(O,E={}){let A=QO(O);return new z().render(A,E)}var oB;var qO=R(()=>{SO();VO();f();SO();VO();oB={name:"twig",extensions:[".twig",".html.twig"],parse:QO,compile:$E,render:ZE}});import{readFile as JE}from"fs/promises";import{join as YE,extname as hO}from"path";x();e();f();OO();EO();function tO(O,E={}){return new OE(E).compile(O)}function eO(O,E={}){let A=tO(O,E),U=Function("__ctx","__helpers",`
|
|
41
43
|
const { escape, isTruthy, toArray, applyFilter, applyTest } = __helpers;
|
|
42
44
|
${A}
|
|
43
45
|
return render(__ctx);
|
|
@@ -378,4 +380,4 @@ ${gB(U,O,B,A)}
|
|
|
378
380
|
document.body.style.cursor = '';
|
|
379
381
|
});
|
|
380
382
|
}
|
|
381
|
-
})();`}function S(O){return String(O).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}x();e();f();OO();y();EO();import*as BE from"path";var AE=/<[^>]+>|:[a-zA-Z_]+|\(\?P<[^>]+>\[[^\]]+\]\)/g;class
|
|
383
|
+
})();`}function S(O){return String(O).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}x();e();f();OO();y();EO();import*as BE from"path";var AE=/<[^>]+>|:[a-zA-Z_]+|\(\?P<[^>]+>\[[^\]]+\]\)/g;class GO{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 q(O).tokenize();return new h(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=BE.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 AE.lastIndex=0,B=B.replace(AE,()=>{if(Q<E.length)return encodeURIComponent(String(E[Q++]));return""}),B}defaultStaticResolver(O){return`/static/${O}`}}function UE(O,E={}){let U=new q(O).tokenize(),Q=new h(U,O).parse();return eO(Q,E)}var k=new Map;function aB(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 GO({debug:B}),Y=async(I)=>{switch(I){case"handlebars":return(await Promise.resolve().then(() => (WO(),RO))).render;case"liquid":return(await Promise.resolve().then(() => (CO(),HO))).render;case"twig":return(await Promise.resolve().then(() => (qO(),LO))).render;default:return(D,M)=>$.renderString(D,M)}},X=async(I,D={})=>{let M=hO(I)||A,W=hO(I)?I:`${I}${M}`,H=YE(E,W),j=`${U}:${H}`,b;if(Q&&k.has(j))b=await k.get(j)({...J,...D});else{let G=await JE(H,"utf-8"),$O=await Y(U);if(Q){let w;switch(U){case"handlebars":{let{compile:V}=await Promise.resolve().then(() => (WO(),RO)),L=V(G);w=async(g)=>L(g);break}case"liquid":{let{compile:V}=await Promise.resolve().then(() => (CO(),HO)),L=V(G);w=async(g)=>L(g);break}case"twig":{let{compile:V}=await Promise.resolve().then(() => (qO(),LO)),L=V(G);w=async(g)=>L(g);break}default:{let V=UE(G);w=async(L)=>V(L)}}k.set(j,w),b=await w({...J,...D})}else b=await $O(G,{...J,...D})}if(Z){let G=YE(E,hO(Z)?Z:`${Z}${A}`),$O=await JE(G,"utf-8");b=await(await Y(U))($O,{...J,...D,[K]:b})}return new Response(b,{headers:{"Content-Type":"text/html; charset=utf-8"}})};return(I)=>I.derive(()=>({render:X}))}function rU(){k.clear()}function lU(){return{size:k.size,keys:Array.from(k.keys())}}var oU=aB;export{lU as getCacheStats,oU as default,rU as clearCache,aB as binja};
|