binja 0.4.6 → 0.5.0

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 CHANGED
@@ -30,7 +30,7 @@
30
30
  | Django DTL Compatible | ✅ 100% | ❌ Partial |
31
31
  | Jinja2 Compatible | ✅ Full | ⚠️ Limited |
32
32
  | Template Inheritance | ✅ | ⚠️ |
33
- | 70+ Built-in Filters | ✅ | ❌ |
33
+ | 80+ Built-in Filters | ✅ | ❌ |
34
34
  | 28 Built-in Tests | ✅ | ❌ |
35
35
  | Debug Panel | ✅ | ❌ |
36
36
  | CLI Tool | ✅ | ⚠️ |
@@ -260,6 +260,8 @@ app.get('/user/:id', ({ params }) => templates.user({ id: params.id }))
260
260
  | `ljust` | `{{ "hi"\|ljust:10 }}` | `hi ` |
261
261
  | `rjust` | `{{ "hi"\|rjust:10 }}` | ` hi` |
262
262
  | `cut` | `{{ "hello"\|cut:"l" }}` | `heo` |
263
+ | `addslashes` | `{{ "it's"\|addslashes }}` | `it\'s` |
264
+ | `stringformat` | `{{ 5\|stringformat:"03d" }}` | `005` |
263
265
 
264
266
  ### Number Filters
265
267
 
@@ -270,6 +272,8 @@ app.get('/user/:id', ({ params }) => templates.user({ id: params.id }))
270
272
  | `floatformat` | `{{ 3.14159\|floatformat:2 }}` | `3.14` |
271
273
  | `filesizeformat` | `{{ 1048576\|filesizeformat }}` | `1.0 MB` |
272
274
  | `divisibleby` | `{{ 10\|divisibleby:2 }}` | `true` |
275
+ | `get_digit` | `{{ 12345\|get_digit:2 }}` | `4` |
276
+ | `widthratio` | `{% widthratio value max 100 %}` | Calculated ratio |
273
277
 
274
278
  ### List Filters
275
279
 
@@ -324,7 +328,12 @@ Common timezone values: `UTC`, `Europe/London`, `Europe/Rome`, `Europe/Paris`, `
324
328
  | `escape` | `{{ html\|escape }}` | HTML escape |
325
329
  | `safe` | `{{ html\|safe }}` | Mark as safe (no escape) |
326
330
  | `urlencode` | `{{ url\|urlencode }}` | URL encode |
331
+ | `iriencode` | `{{ url\|iriencode }}` | IRI encode (unicode-safe) |
327
332
  | `json` | `{{ data\|json }}` | JSON stringify |
333
+ | `json_script` | `{{ data\|json_script:"id" }}` | Safe JSON in script tag |
334
+ | `truncatechars_html` | `{{ html\|truncatechars_html:10 }}` | Truncate preserving HTML |
335
+ | `truncatewords_html` | `{{ html\|truncatewords_html:5 }}` | Truncate words in HTML |
336
+ | `urlizetrunc` | `{{ text\|urlizetrunc:15 }}` | URLs with truncated display |
328
337
 
329
338
  ### Default Values
330
339
 
@@ -389,13 +398,28 @@ binja is designed to be a drop-in replacement for Django templates:
389
398
  {% url 'home' %}
390
399
  {% static 'css/style.css' %}
391
400
 
392
- {% csrf_token %} {# Returns empty for JS compatibility #}
401
+ {% csrf_token %}
393
402
 
394
403
  {{ forloop.counter }}
395
404
  {{ forloop.first }}
396
405
  {{ forloop.parentloop.counter }}
397
406
  ```
398
407
 
408
+ ### Django-Specific Tags
409
+
410
+ | Tag | Description | Example |
411
+ |-----|-------------|---------|
412
+ | `{% csrf_token %}` | CSRF token input | `<input type="hidden" ...>` |
413
+ | `{% cycle %}` | Cycle through values | `{% cycle 'odd' 'even' %}` |
414
+ | `{% firstof %}` | First truthy value | `{% firstof var1 var2 "default" %}` |
415
+ | `{% ifchanged %}` | Output on change | `{% ifchanged %}{{ item }}{% endifchanged %}` |
416
+ | `{% ifequal %}` | Equality check | `{% ifequal a b %}equal{% endifequal %}` |
417
+ | `{% lorem %}` | Lorem ipsum text | `{% lorem 3 p %}` |
418
+ | `{% regroup %}` | Group list by attr | `{% regroup list by attr as grouped %}` |
419
+ | `{% templatetag %}` | Literal tag chars | `{% templatetag openblock %}` → `{%` |
420
+ | `{% widthratio %}` | Calculate ratio | `{% widthratio value max 100 %}` |
421
+ | `{% debug %}` | Debug context | Outputs context as JSON |
422
+
399
423
  ---
400
424
 
401
425
  ## Configuration
package/dist/cli.js CHANGED
@@ -624,6 +624,28 @@ class Parser {
624
624
  case "autoescape":
625
625
  case "verbatim":
626
626
  return this.parseSimpleBlock(start, tagName.value);
627
+ case "cycle":
628
+ return this.parseCycle(start);
629
+ case "firstof":
630
+ return this.parseFirstof(start);
631
+ case "ifchanged":
632
+ return this.parseIfchanged(start);
633
+ case "regroup":
634
+ return this.parseRegroup(start);
635
+ case "widthratio":
636
+ return this.parseWidthratio(start);
637
+ case "lorem":
638
+ return this.parseLorem(start);
639
+ case "csrf_token":
640
+ return this.parseCsrfToken(start);
641
+ case "debug":
642
+ return this.parseDebug(start);
643
+ case "templatetag":
644
+ return this.parseTemplatetag(start);
645
+ case "ifequal":
646
+ return this.parseIfequal(start, false);
647
+ case "ifnotequal":
648
+ return this.parseIfequal(start, true);
627
649
  default:
628
650
  this.skipToBlockEnd();
629
651
  return null;
@@ -927,7 +949,7 @@ class Parser {
927
949
  column: start.column
928
950
  };
929
951
  }
930
- parseComment(start) {
952
+ parseComment(_start) {
931
953
  this.expect("BLOCK_END" /* BLOCK_END */);
932
954
  while (!this.isAtEnd()) {
933
955
  if (this.checkBlockTag("endcomment"))
@@ -937,7 +959,7 @@ class Parser {
937
959
  this.expectBlockTag("endcomment");
938
960
  return null;
939
961
  }
940
- parseSimpleBlock(start, tagName) {
962
+ parseSimpleBlock(_start, tagName) {
941
963
  this.skipToBlockEnd();
942
964
  const endTag = `end${tagName}`;
943
965
  while (!this.isAtEnd()) {
@@ -952,6 +974,236 @@ class Parser {
952
974
  }
953
975
  return null;
954
976
  }
977
+ parseCycle(start) {
978
+ const values = [];
979
+ let asVar = null;
980
+ let silent = false;
981
+ while (!this.check("BLOCK_END" /* BLOCK_END */)) {
982
+ if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
983
+ this.advance();
984
+ asVar = this.expect("NAME" /* NAME */).value;
985
+ if (this.check("NAME" /* NAME */) && this.peek().value === "silent") {
986
+ this.advance();
987
+ silent = true;
988
+ }
989
+ break;
990
+ }
991
+ values.push(this.parseExpression());
992
+ }
993
+ this.expect("BLOCK_END" /* BLOCK_END */);
994
+ return {
995
+ type: "Cycle",
996
+ values,
997
+ asVar,
998
+ silent,
999
+ line: start.line,
1000
+ column: start.column
1001
+ };
1002
+ }
1003
+ parseFirstof(start) {
1004
+ const values = [];
1005
+ let fallback = null;
1006
+ let asVar = null;
1007
+ while (!this.check("BLOCK_END" /* BLOCK_END */)) {
1008
+ if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
1009
+ this.advance();
1010
+ asVar = this.expect("NAME" /* NAME */).value;
1011
+ break;
1012
+ }
1013
+ values.push(this.parseExpression());
1014
+ }
1015
+ if (values.length > 0) {
1016
+ const last = values[values.length - 1];
1017
+ if (last.type === "Literal" && typeof last.value === "string") {
1018
+ fallback = values.pop();
1019
+ }
1020
+ }
1021
+ this.expect("BLOCK_END" /* BLOCK_END */);
1022
+ return {
1023
+ type: "Firstof",
1024
+ values,
1025
+ fallback,
1026
+ asVar,
1027
+ line: start.line,
1028
+ column: start.column
1029
+ };
1030
+ }
1031
+ parseIfchanged(start) {
1032
+ const values = [];
1033
+ while (!this.check("BLOCK_END" /* BLOCK_END */)) {
1034
+ values.push(this.parseExpression());
1035
+ }
1036
+ this.expect("BLOCK_END" /* BLOCK_END */);
1037
+ const body = [];
1038
+ let else_ = [];
1039
+ while (!this.isAtEnd()) {
1040
+ if (this.checkBlockTag("else") || this.checkBlockTag("endifchanged"))
1041
+ break;
1042
+ const node = this.parseStatement();
1043
+ if (node)
1044
+ body.push(node);
1045
+ }
1046
+ if (this.checkBlockTag("else")) {
1047
+ this.advance();
1048
+ this.advance();
1049
+ this.expect("BLOCK_END" /* BLOCK_END */);
1050
+ while (!this.isAtEnd()) {
1051
+ if (this.checkBlockTag("endifchanged"))
1052
+ break;
1053
+ const node = this.parseStatement();
1054
+ if (node)
1055
+ else_.push(node);
1056
+ }
1057
+ }
1058
+ this.expectBlockTag("endifchanged");
1059
+ return {
1060
+ type: "Ifchanged",
1061
+ values,
1062
+ body,
1063
+ else_,
1064
+ line: start.line,
1065
+ column: start.column
1066
+ };
1067
+ }
1068
+ parseRegroup(start) {
1069
+ const target = this.parseExpression();
1070
+ this.expectName("by");
1071
+ const key = this.expect("NAME" /* NAME */).value;
1072
+ this.expectName("as");
1073
+ const asVar = this.expect("NAME" /* NAME */).value;
1074
+ this.expect("BLOCK_END" /* BLOCK_END */);
1075
+ return {
1076
+ type: "Regroup",
1077
+ target,
1078
+ key,
1079
+ asVar,
1080
+ line: start.line,
1081
+ column: start.column
1082
+ };
1083
+ }
1084
+ parseWidthratio(start) {
1085
+ const value = this.parseExpression();
1086
+ const maxValue = this.parseExpression();
1087
+ const maxWidth = this.parseExpression();
1088
+ let asVar = null;
1089
+ if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
1090
+ this.advance();
1091
+ asVar = this.expect("NAME" /* NAME */).value;
1092
+ }
1093
+ this.expect("BLOCK_END" /* BLOCK_END */);
1094
+ return {
1095
+ type: "Widthratio",
1096
+ value,
1097
+ maxValue,
1098
+ maxWidth,
1099
+ asVar,
1100
+ line: start.line,
1101
+ column: start.column
1102
+ };
1103
+ }
1104
+ parseLorem(start) {
1105
+ let count = null;
1106
+ let method = "p";
1107
+ let random = false;
1108
+ if (this.check("NUMBER" /* NUMBER */)) {
1109
+ count = {
1110
+ type: "Literal",
1111
+ value: parseInt(this.advance().value, 10),
1112
+ line: start.line,
1113
+ column: start.column
1114
+ };
1115
+ }
1116
+ if (this.check("NAME" /* NAME */)) {
1117
+ const m = this.peek().value.toLowerCase();
1118
+ if (m === "w" || m === "p" || m === "b") {
1119
+ method = m;
1120
+ this.advance();
1121
+ }
1122
+ }
1123
+ if (this.check("NAME" /* NAME */) && this.peek().value === "random") {
1124
+ random = true;
1125
+ this.advance();
1126
+ }
1127
+ this.expect("BLOCK_END" /* BLOCK_END */);
1128
+ return {
1129
+ type: "Lorem",
1130
+ count,
1131
+ method,
1132
+ random,
1133
+ line: start.line,
1134
+ column: start.column
1135
+ };
1136
+ }
1137
+ parseCsrfToken(start) {
1138
+ this.expect("BLOCK_END" /* BLOCK_END */);
1139
+ return {
1140
+ type: "CsrfToken",
1141
+ line: start.line,
1142
+ column: start.column
1143
+ };
1144
+ }
1145
+ parseDebug(start) {
1146
+ this.expect("BLOCK_END" /* BLOCK_END */);
1147
+ return {
1148
+ type: "Debug",
1149
+ line: start.line,
1150
+ column: start.column
1151
+ };
1152
+ }
1153
+ parseTemplatetag(start) {
1154
+ const tagType = this.expect("NAME" /* NAME */).value;
1155
+ this.expect("BLOCK_END" /* BLOCK_END */);
1156
+ return {
1157
+ type: "Templatetag",
1158
+ tagType,
1159
+ line: start.line,
1160
+ column: start.column
1161
+ };
1162
+ }
1163
+ parseIfequal(start, negated) {
1164
+ const left = this.parseExpression();
1165
+ const right = this.parseExpression();
1166
+ this.expect("BLOCK_END" /* BLOCK_END */);
1167
+ const test = {
1168
+ type: "Compare",
1169
+ left,
1170
+ ops: [{ operator: negated ? "!=" : "==", right }],
1171
+ line: start.line,
1172
+ column: start.column
1173
+ };
1174
+ const body = [];
1175
+ let else_ = [];
1176
+ const endTag = negated ? "endifnotequal" : "endifequal";
1177
+ while (!this.isAtEnd()) {
1178
+ if (this.checkBlockTag("else") || this.checkBlockTag(endTag))
1179
+ break;
1180
+ const node = this.parseStatement();
1181
+ if (node)
1182
+ body.push(node);
1183
+ }
1184
+ if (this.checkBlockTag("else")) {
1185
+ this.advance();
1186
+ this.advance();
1187
+ this.expect("BLOCK_END" /* BLOCK_END */);
1188
+ while (!this.isAtEnd()) {
1189
+ if (this.checkBlockTag(endTag))
1190
+ break;
1191
+ const node = this.parseStatement();
1192
+ if (node)
1193
+ else_.push(node);
1194
+ }
1195
+ }
1196
+ this.expectBlockTag(endTag);
1197
+ return {
1198
+ type: "If",
1199
+ test,
1200
+ body,
1201
+ elifs: [],
1202
+ else_,
1203
+ line: start.line,
1204
+ column: start.column
1205
+ };
1206
+ }
955
1207
  parseExpression() {
956
1208
  return this.parseConditional();
957
1209
  }
@@ -79,5 +79,14 @@ export declare const forceescape: FilterFunction;
79
79
  export declare const phone2numeric: FilterFunction;
80
80
  export declare const linenumbers: FilterFunction;
81
81
  export declare const unordered_list: FilterFunction;
82
+ export declare const addslashes: FilterFunction;
83
+ export declare const get_digit: FilterFunction;
84
+ export declare const iriencode: FilterFunction;
85
+ export declare const json_script: FilterFunction;
86
+ export declare const safeseq: FilterFunction;
87
+ export declare const stringformat: FilterFunction;
88
+ export declare const truncatechars_html: FilterFunction;
89
+ export declare const truncatewords_html: FilterFunction;
90
+ export declare const urlizetrunc: FilterFunction;
82
91
  export declare const builtinFilters: Record<string, FilterFunction>;
83
92
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -660,6 +660,28 @@ class Parser {
660
660
  case "autoescape":
661
661
  case "verbatim":
662
662
  return this.parseSimpleBlock(start, tagName.value);
663
+ case "cycle":
664
+ return this.parseCycle(start);
665
+ case "firstof":
666
+ return this.parseFirstof(start);
667
+ case "ifchanged":
668
+ return this.parseIfchanged(start);
669
+ case "regroup":
670
+ return this.parseRegroup(start);
671
+ case "widthratio":
672
+ return this.parseWidthratio(start);
673
+ case "lorem":
674
+ return this.parseLorem(start);
675
+ case "csrf_token":
676
+ return this.parseCsrfToken(start);
677
+ case "debug":
678
+ return this.parseDebug(start);
679
+ case "templatetag":
680
+ return this.parseTemplatetag(start);
681
+ case "ifequal":
682
+ return this.parseIfequal(start, false);
683
+ case "ifnotequal":
684
+ return this.parseIfequal(start, true);
663
685
  default:
664
686
  this.skipToBlockEnd();
665
687
  return null;
@@ -963,7 +985,7 @@ class Parser {
963
985
  column: start.column
964
986
  };
965
987
  }
966
- parseComment(start) {
988
+ parseComment(_start) {
967
989
  this.expect("BLOCK_END" /* BLOCK_END */);
968
990
  while (!this.isAtEnd()) {
969
991
  if (this.checkBlockTag("endcomment"))
@@ -973,7 +995,7 @@ class Parser {
973
995
  this.expectBlockTag("endcomment");
974
996
  return null;
975
997
  }
976
- parseSimpleBlock(start, tagName) {
998
+ parseSimpleBlock(_start, tagName) {
977
999
  this.skipToBlockEnd();
978
1000
  const endTag = `end${tagName}`;
979
1001
  while (!this.isAtEnd()) {
@@ -988,6 +1010,236 @@ class Parser {
988
1010
  }
989
1011
  return null;
990
1012
  }
1013
+ parseCycle(start) {
1014
+ const values = [];
1015
+ let asVar = null;
1016
+ let silent = false;
1017
+ while (!this.check("BLOCK_END" /* BLOCK_END */)) {
1018
+ if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
1019
+ this.advance();
1020
+ asVar = this.expect("NAME" /* NAME */).value;
1021
+ if (this.check("NAME" /* NAME */) && this.peek().value === "silent") {
1022
+ this.advance();
1023
+ silent = true;
1024
+ }
1025
+ break;
1026
+ }
1027
+ values.push(this.parseExpression());
1028
+ }
1029
+ this.expect("BLOCK_END" /* BLOCK_END */);
1030
+ return {
1031
+ type: "Cycle",
1032
+ values,
1033
+ asVar,
1034
+ silent,
1035
+ line: start.line,
1036
+ column: start.column
1037
+ };
1038
+ }
1039
+ parseFirstof(start) {
1040
+ const values = [];
1041
+ let fallback = null;
1042
+ let asVar = null;
1043
+ while (!this.check("BLOCK_END" /* BLOCK_END */)) {
1044
+ if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
1045
+ this.advance();
1046
+ asVar = this.expect("NAME" /* NAME */).value;
1047
+ break;
1048
+ }
1049
+ values.push(this.parseExpression());
1050
+ }
1051
+ if (values.length > 0) {
1052
+ const last = values[values.length - 1];
1053
+ if (last.type === "Literal" && typeof last.value === "string") {
1054
+ fallback = values.pop();
1055
+ }
1056
+ }
1057
+ this.expect("BLOCK_END" /* BLOCK_END */);
1058
+ return {
1059
+ type: "Firstof",
1060
+ values,
1061
+ fallback,
1062
+ asVar,
1063
+ line: start.line,
1064
+ column: start.column
1065
+ };
1066
+ }
1067
+ parseIfchanged(start) {
1068
+ const values = [];
1069
+ while (!this.check("BLOCK_END" /* BLOCK_END */)) {
1070
+ values.push(this.parseExpression());
1071
+ }
1072
+ this.expect("BLOCK_END" /* BLOCK_END */);
1073
+ const body = [];
1074
+ let else_ = [];
1075
+ while (!this.isAtEnd()) {
1076
+ if (this.checkBlockTag("else") || this.checkBlockTag("endifchanged"))
1077
+ break;
1078
+ const node = this.parseStatement();
1079
+ if (node)
1080
+ body.push(node);
1081
+ }
1082
+ if (this.checkBlockTag("else")) {
1083
+ this.advance();
1084
+ this.advance();
1085
+ this.expect("BLOCK_END" /* BLOCK_END */);
1086
+ while (!this.isAtEnd()) {
1087
+ if (this.checkBlockTag("endifchanged"))
1088
+ break;
1089
+ const node = this.parseStatement();
1090
+ if (node)
1091
+ else_.push(node);
1092
+ }
1093
+ }
1094
+ this.expectBlockTag("endifchanged");
1095
+ return {
1096
+ type: "Ifchanged",
1097
+ values,
1098
+ body,
1099
+ else_,
1100
+ line: start.line,
1101
+ column: start.column
1102
+ };
1103
+ }
1104
+ parseRegroup(start) {
1105
+ const target = this.parseExpression();
1106
+ this.expectName("by");
1107
+ const key = this.expect("NAME" /* NAME */).value;
1108
+ this.expectName("as");
1109
+ const asVar = this.expect("NAME" /* NAME */).value;
1110
+ this.expect("BLOCK_END" /* BLOCK_END */);
1111
+ return {
1112
+ type: "Regroup",
1113
+ target,
1114
+ key,
1115
+ asVar,
1116
+ line: start.line,
1117
+ column: start.column
1118
+ };
1119
+ }
1120
+ parseWidthratio(start) {
1121
+ const value = this.parseExpression();
1122
+ const maxValue = this.parseExpression();
1123
+ const maxWidth = this.parseExpression();
1124
+ let asVar = null;
1125
+ if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
1126
+ this.advance();
1127
+ asVar = this.expect("NAME" /* NAME */).value;
1128
+ }
1129
+ this.expect("BLOCK_END" /* BLOCK_END */);
1130
+ return {
1131
+ type: "Widthratio",
1132
+ value,
1133
+ maxValue,
1134
+ maxWidth,
1135
+ asVar,
1136
+ line: start.line,
1137
+ column: start.column
1138
+ };
1139
+ }
1140
+ parseLorem(start) {
1141
+ let count = null;
1142
+ let method = "p";
1143
+ let random = false;
1144
+ if (this.check("NUMBER" /* NUMBER */)) {
1145
+ count = {
1146
+ type: "Literal",
1147
+ value: parseInt(this.advance().value, 10),
1148
+ line: start.line,
1149
+ column: start.column
1150
+ };
1151
+ }
1152
+ if (this.check("NAME" /* NAME */)) {
1153
+ const m = this.peek().value.toLowerCase();
1154
+ if (m === "w" || m === "p" || m === "b") {
1155
+ method = m;
1156
+ this.advance();
1157
+ }
1158
+ }
1159
+ if (this.check("NAME" /* NAME */) && this.peek().value === "random") {
1160
+ random = true;
1161
+ this.advance();
1162
+ }
1163
+ this.expect("BLOCK_END" /* BLOCK_END */);
1164
+ return {
1165
+ type: "Lorem",
1166
+ count,
1167
+ method,
1168
+ random,
1169
+ line: start.line,
1170
+ column: start.column
1171
+ };
1172
+ }
1173
+ parseCsrfToken(start) {
1174
+ this.expect("BLOCK_END" /* BLOCK_END */);
1175
+ return {
1176
+ type: "CsrfToken",
1177
+ line: start.line,
1178
+ column: start.column
1179
+ };
1180
+ }
1181
+ parseDebug(start) {
1182
+ this.expect("BLOCK_END" /* BLOCK_END */);
1183
+ return {
1184
+ type: "Debug",
1185
+ line: start.line,
1186
+ column: start.column
1187
+ };
1188
+ }
1189
+ parseTemplatetag(start) {
1190
+ const tagType = this.expect("NAME" /* NAME */).value;
1191
+ this.expect("BLOCK_END" /* BLOCK_END */);
1192
+ return {
1193
+ type: "Templatetag",
1194
+ tagType,
1195
+ line: start.line,
1196
+ column: start.column
1197
+ };
1198
+ }
1199
+ parseIfequal(start, negated) {
1200
+ const left = this.parseExpression();
1201
+ const right = this.parseExpression();
1202
+ this.expect("BLOCK_END" /* BLOCK_END */);
1203
+ const test = {
1204
+ type: "Compare",
1205
+ left,
1206
+ ops: [{ operator: negated ? "!=" : "==", right }],
1207
+ line: start.line,
1208
+ column: start.column
1209
+ };
1210
+ const body = [];
1211
+ let else_ = [];
1212
+ const endTag = negated ? "endifnotequal" : "endifequal";
1213
+ while (!this.isAtEnd()) {
1214
+ if (this.checkBlockTag("else") || this.checkBlockTag(endTag))
1215
+ break;
1216
+ const node = this.parseStatement();
1217
+ if (node)
1218
+ body.push(node);
1219
+ }
1220
+ if (this.checkBlockTag("else")) {
1221
+ this.advance();
1222
+ this.advance();
1223
+ this.expect("BLOCK_END" /* BLOCK_END */);
1224
+ while (!this.isAtEnd()) {
1225
+ if (this.checkBlockTag(endTag))
1226
+ break;
1227
+ const node = this.parseStatement();
1228
+ if (node)
1229
+ else_.push(node);
1230
+ }
1231
+ }
1232
+ this.expectBlockTag(endTag);
1233
+ return {
1234
+ type: "If",
1235
+ test,
1236
+ body,
1237
+ elifs: [],
1238
+ else_,
1239
+ line: start.line,
1240
+ column: start.column
1241
+ };
1242
+ }
991
1243
  parseExpression() {
992
1244
  return this.parseConditional();
993
1245
  }
@@ -2231,6 +2483,172 @@ ${indent2}`;
2231
2483
  safeString.__safe__ = true;
2232
2484
  return safeString;
2233
2485
  };
2486
+ var addslashes = (value) => {
2487
+ const result = String(value).replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, "\\\"");
2488
+ const safeString = new String(result);
2489
+ safeString.__safe__ = true;
2490
+ return safeString;
2491
+ };
2492
+ var get_digit = (value, digit) => {
2493
+ const num = parseInt(String(value), 10);
2494
+ if (isNaN(num))
2495
+ return value;
2496
+ const str = String(Math.abs(num));
2497
+ const pos = Number(digit) || 1;
2498
+ if (pos < 1 || pos > str.length)
2499
+ return value;
2500
+ return parseInt(str[str.length - pos], 10);
2501
+ };
2502
+ var iriencode = (value) => {
2503
+ return String(value).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");
2504
+ };
2505
+ var json_script = (value, elementId) => {
2506
+ const jsonStr = JSON.stringify(value).replace(/</g, "\\u003C").replace(/>/g, "\\u003E").replace(/&/g, "\\u0026");
2507
+ const id = elementId ? ` id="${String(elementId)}"` : "";
2508
+ const html = `<script${id} type="application/json">${jsonStr}</script>`;
2509
+ const safeString = new String(html);
2510
+ safeString.__safe__ = true;
2511
+ return safeString;
2512
+ };
2513
+ var safeseq = (value) => {
2514
+ if (!Array.isArray(value))
2515
+ return value;
2516
+ return value.map((item) => {
2517
+ const safeString = new String(item);
2518
+ safeString.__safe__ = true;
2519
+ return safeString;
2520
+ });
2521
+ };
2522
+ var stringformat = (value, formatStr) => {
2523
+ const fmt = String(formatStr);
2524
+ const val = value;
2525
+ if (fmt === "s")
2526
+ return String(val);
2527
+ if (fmt === "d" || fmt === "i")
2528
+ return String(parseInt(String(val), 10) || 0);
2529
+ if (fmt === "f")
2530
+ return String(parseFloat(String(val)) || 0);
2531
+ if (fmt === "x")
2532
+ return (parseInt(String(val), 10) || 0).toString(16);
2533
+ if (fmt === "X")
2534
+ return (parseInt(String(val), 10) || 0).toString(16).toUpperCase();
2535
+ if (fmt === "o")
2536
+ return (parseInt(String(val), 10) || 0).toString(8);
2537
+ if (fmt === "b")
2538
+ return (parseInt(String(val), 10) || 0).toString(2);
2539
+ if (fmt === "e")
2540
+ return (parseFloat(String(val)) || 0).toExponential();
2541
+ const precisionMatch = fmt.match(/^\.?(\d+)f$/);
2542
+ if (precisionMatch) {
2543
+ const precision = parseInt(precisionMatch[1], 10);
2544
+ return (parseFloat(String(val)) || 0).toFixed(precision);
2545
+ }
2546
+ const widthMatch = fmt.match(/^(\d+)([sd])$/);
2547
+ if (widthMatch) {
2548
+ const width = parseInt(widthMatch[1], 10);
2549
+ const type = widthMatch[2];
2550
+ const strVal = type === "d" ? String(parseInt(String(val), 10) || 0) : String(val);
2551
+ return strVal.padStart(width, type === "d" ? "0" : " ");
2552
+ }
2553
+ return String(val);
2554
+ };
2555
+ var truncatechars_html = (value, length2 = 30) => {
2556
+ const str = String(value);
2557
+ const maxLen = Number(length2);
2558
+ let result = "";
2559
+ let textLen = 0;
2560
+ let inTag = false;
2561
+ const openTags = [];
2562
+ for (let i = 0;i < str.length && textLen < maxLen; i++) {
2563
+ const char = str[i];
2564
+ if (char === "<") {
2565
+ inTag = true;
2566
+ const closeMatch = str.slice(i).match(/^<\/(\w+)/);
2567
+ const openMatch = str.slice(i).match(/^<(\w+)/);
2568
+ if (closeMatch) {
2569
+ const tagName = closeMatch[1].toLowerCase();
2570
+ const lastOpen = openTags.lastIndexOf(tagName);
2571
+ if (lastOpen !== -1)
2572
+ openTags.splice(lastOpen, 1);
2573
+ } else if (openMatch && !str.slice(i).match(/^<\w+[^>]*\/>/)) {
2574
+ openTags.push(openMatch[1].toLowerCase());
2575
+ }
2576
+ }
2577
+ result += char;
2578
+ if (char === ">") {
2579
+ inTag = false;
2580
+ } else if (!inTag) {
2581
+ textLen++;
2582
+ }
2583
+ }
2584
+ if (textLen >= maxLen && str.length > result.length) {
2585
+ result += "...";
2586
+ }
2587
+ for (let i = openTags.length - 1;i >= 0; i--) {
2588
+ result += `</${openTags[i]}>`;
2589
+ }
2590
+ const safeString = new String(result);
2591
+ safeString.__safe__ = true;
2592
+ return safeString;
2593
+ };
2594
+ var truncatewords_html = (value, count = 15) => {
2595
+ const str = String(value);
2596
+ const maxWords = Number(count);
2597
+ let result = "";
2598
+ let wordCount = 0;
2599
+ let inTag = false;
2600
+ let inWord = false;
2601
+ const openTags = [];
2602
+ for (let i = 0;i < str.length && wordCount < maxWords; i++) {
2603
+ const char = str[i];
2604
+ if (char === "<") {
2605
+ inTag = true;
2606
+ const closeMatch = str.slice(i).match(/^<\/(\w+)/);
2607
+ const openMatch = str.slice(i).match(/^<(\w+)/);
2608
+ if (closeMatch) {
2609
+ const tagName = closeMatch[1].toLowerCase();
2610
+ const lastOpen = openTags.lastIndexOf(tagName);
2611
+ if (lastOpen !== -1)
2612
+ openTags.splice(lastOpen, 1);
2613
+ } else if (openMatch && !str.slice(i).match(/^<\w+[^>]*\/>/)) {
2614
+ openTags.push(openMatch[1].toLowerCase());
2615
+ }
2616
+ }
2617
+ result += char;
2618
+ if (char === ">") {
2619
+ inTag = false;
2620
+ } else if (!inTag) {
2621
+ const isSpace = /\s/.test(char);
2622
+ if (!isSpace && !inWord) {
2623
+ inWord = true;
2624
+ } else if (isSpace && inWord) {
2625
+ inWord = false;
2626
+ wordCount++;
2627
+ }
2628
+ }
2629
+ }
2630
+ if (inWord)
2631
+ wordCount++;
2632
+ if (wordCount >= maxWords) {
2633
+ result = result.trimEnd() + "...";
2634
+ }
2635
+ for (let i = openTags.length - 1;i >= 0; i--) {
2636
+ result += `</${openTags[i]}>`;
2637
+ }
2638
+ const safeString = new String(result);
2639
+ safeString.__safe__ = true;
2640
+ return safeString;
2641
+ };
2642
+ var urlizetrunc = (value, limit = 15) => {
2643
+ const maxLen = Number(limit);
2644
+ const html = String(value).replace(URLIZE_REGEX, (url) => {
2645
+ const displayUrl = url.length > maxLen ? url.slice(0, maxLen) + "..." : url;
2646
+ return `<a href="${url}">${displayUrl}</a>`;
2647
+ });
2648
+ const safeString = new String(html);
2649
+ safeString.__safe__ = true;
2650
+ return safeString;
2651
+ };
2234
2652
  var builtinFilters = {
2235
2653
  upper,
2236
2654
  lower,
@@ -2309,7 +2727,16 @@ var builtinFilters = {
2309
2727
  forceescape,
2310
2728
  phone2numeric,
2311
2729
  linenumbers,
2312
- unordered_list
2730
+ unordered_list,
2731
+ addslashes,
2732
+ get_digit,
2733
+ iriencode,
2734
+ json_script,
2735
+ safeseq,
2736
+ stringformat,
2737
+ truncatechars_html,
2738
+ truncatewords_html,
2739
+ urlizetrunc
2313
2740
  };
2314
2741
 
2315
2742
  // src/tests/index.ts
@@ -2625,6 +3052,24 @@ class Runtime {
2625
3052
  case "Load":
2626
3053
  case "Extends":
2627
3054
  return null;
3055
+ case "Cycle":
3056
+ return this.renderCycleSync(node, ctx);
3057
+ case "Firstof":
3058
+ return this.renderFirstofSync(node, ctx);
3059
+ case "Ifchanged":
3060
+ return this.renderIfchangedSync(node, ctx);
3061
+ case "Regroup":
3062
+ return this.renderRegroupSync(node, ctx);
3063
+ case "Widthratio":
3064
+ return this.renderWidthratioSync(node, ctx);
3065
+ case "Lorem":
3066
+ return this.renderLoremSync(node, ctx);
3067
+ case "CsrfToken":
3068
+ return this.renderCsrfTokenSync();
3069
+ case "Debug":
3070
+ return this.renderDebugSync(ctx);
3071
+ case "Templatetag":
3072
+ return this.renderTemplatetagSync(node);
2628
3073
  default:
2629
3074
  return null;
2630
3075
  }
@@ -2770,6 +3215,217 @@ class Runtime {
2770
3215
  }
2771
3216
  return result;
2772
3217
  }
3218
+ cycleState = new Map;
3219
+ renderCycleSync(node, ctx) {
3220
+ const key = node.values.map((v) => JSON.stringify(v)).join(",");
3221
+ const currentIndex = this.cycleState.get(key) ?? 0;
3222
+ const values = node.values.map((v) => this.eval(v, ctx));
3223
+ const value = values[currentIndex % values.length];
3224
+ this.cycleState.set(key, currentIndex + 1);
3225
+ if (node.asVar) {
3226
+ ctx.set(node.asVar, value);
3227
+ return node.silent ? "" : this.stringify(value);
3228
+ }
3229
+ return this.stringify(value);
3230
+ }
3231
+ renderFirstofSync(node, ctx) {
3232
+ for (const expr of node.values) {
3233
+ const value = this.eval(expr, ctx);
3234
+ if (this.isTruthy(value)) {
3235
+ if (node.asVar) {
3236
+ ctx.set(node.asVar, value);
3237
+ return "";
3238
+ }
3239
+ return this.stringify(value);
3240
+ }
3241
+ }
3242
+ const fallback = node.fallback ? this.eval(node.fallback, ctx) : "";
3243
+ if (node.asVar) {
3244
+ ctx.set(node.asVar, fallback);
3245
+ return "";
3246
+ }
3247
+ return this.stringify(fallback);
3248
+ }
3249
+ ifchangedState = new Map;
3250
+ renderIfchangedSync(node, ctx) {
3251
+ const key = `ifchanged_${node.line}_${node.column}`;
3252
+ let currentValue;
3253
+ if (node.values.length > 0) {
3254
+ currentValue = node.values.map((v) => this.eval(v, ctx));
3255
+ } else {
3256
+ currentValue = this.renderNodesSync(node.body, ctx);
3257
+ }
3258
+ const lastValue = this.ifchangedState.get(key);
3259
+ const changed = JSON.stringify(currentValue) !== JSON.stringify(lastValue);
3260
+ this.ifchangedState.set(key, currentValue);
3261
+ if (changed) {
3262
+ if (node.values.length > 0) {
3263
+ return this.renderNodesSync(node.body, ctx);
3264
+ }
3265
+ return currentValue;
3266
+ } else {
3267
+ return this.renderNodesSync(node.else_, ctx);
3268
+ }
3269
+ }
3270
+ renderRegroupSync(node, ctx) {
3271
+ const list2 = this.toIterable(this.eval(node.target, ctx));
3272
+ const groups = [];
3273
+ let currentGrouper = Symbol("initial");
3274
+ let currentList = [];
3275
+ for (const item of list2) {
3276
+ const grouper = item && typeof item === "object" ? item[node.key] : undefined;
3277
+ if (grouper !== currentGrouper) {
3278
+ if (currentList.length > 0) {
3279
+ groups.push({ grouper: currentGrouper, list: currentList });
3280
+ }
3281
+ currentGrouper = grouper;
3282
+ currentList = [item];
3283
+ } else {
3284
+ currentList.push(item);
3285
+ }
3286
+ }
3287
+ if (currentList.length > 0) {
3288
+ groups.push({ grouper: currentGrouper, list: currentList });
3289
+ }
3290
+ ctx.set(node.asVar, groups);
3291
+ return "";
3292
+ }
3293
+ renderWidthratioSync(node, ctx) {
3294
+ const value = Number(this.eval(node.value, ctx));
3295
+ const maxValue = Number(this.eval(node.maxValue, ctx));
3296
+ const maxWidth = Number(this.eval(node.maxWidth, ctx));
3297
+ const ratio = maxValue === 0 ? 0 : Math.round(value / maxValue * maxWidth);
3298
+ if (node.asVar) {
3299
+ ctx.set(node.asVar, ratio);
3300
+ return "";
3301
+ }
3302
+ return String(ratio);
3303
+ }
3304
+ renderLoremSync(node, ctx) {
3305
+ const count = node.count ? Number(this.eval(node.count, ctx)) : 1;
3306
+ const method = node.method;
3307
+ const words = [
3308
+ "lorem",
3309
+ "ipsum",
3310
+ "dolor",
3311
+ "sit",
3312
+ "amet",
3313
+ "consectetur",
3314
+ "adipiscing",
3315
+ "elit",
3316
+ "sed",
3317
+ "do",
3318
+ "eiusmod",
3319
+ "tempor",
3320
+ "incididunt",
3321
+ "ut",
3322
+ "labore",
3323
+ "et",
3324
+ "dolore",
3325
+ "magna",
3326
+ "aliqua",
3327
+ "enim",
3328
+ "ad",
3329
+ "minim",
3330
+ "veniam",
3331
+ "quis",
3332
+ "nostrud",
3333
+ "exercitation",
3334
+ "ullamco",
3335
+ "laboris",
3336
+ "nisi",
3337
+ "aliquip",
3338
+ "ex",
3339
+ "ea",
3340
+ "commodo",
3341
+ "consequat",
3342
+ "duis",
3343
+ "aute",
3344
+ "irure",
3345
+ "in",
3346
+ "reprehenderit",
3347
+ "voluptate",
3348
+ "velit",
3349
+ "esse",
3350
+ "cillum",
3351
+ "fugiat",
3352
+ "nulla",
3353
+ "pariatur",
3354
+ "excepteur",
3355
+ "sint",
3356
+ "occaecat",
3357
+ "cupidatat",
3358
+ "non",
3359
+ "proident",
3360
+ "sunt",
3361
+ "culpa",
3362
+ "qui",
3363
+ "officia",
3364
+ "deserunt",
3365
+ "mollit",
3366
+ "anim",
3367
+ "id",
3368
+ "est",
3369
+ "laborum"
3370
+ ];
3371
+ const getWord = (index) => {
3372
+ if (node.random) {
3373
+ return words[Math.floor(Math.random() * words.length)];
3374
+ }
3375
+ return words[index % words.length];
3376
+ };
3377
+ if (method === "w") {
3378
+ const result = [];
3379
+ for (let i = 0;i < count; i++) {
3380
+ result.push(getWord(i));
3381
+ }
3382
+ return result.join(" ");
3383
+ } else if (method === "p" || method === "b") {
3384
+ const paragraphs = [];
3385
+ for (let p = 0;p < count; p++) {
3386
+ const sentenceCount = 3 + p % 3;
3387
+ const sentences = [];
3388
+ for (let s = 0;s < sentenceCount; s++) {
3389
+ const wordCount = 8 + s % 7;
3390
+ const sentenceWords = [];
3391
+ for (let w = 0;w < wordCount; w++) {
3392
+ sentenceWords.push(getWord(p * 100 + s * 20 + w));
3393
+ }
3394
+ sentenceWords[0] = sentenceWords[0].charAt(0).toUpperCase() + sentenceWords[0].slice(1);
3395
+ sentences.push(sentenceWords.join(" ") + ".");
3396
+ }
3397
+ paragraphs.push(sentences.join(" "));
3398
+ }
3399
+ if (method === "b") {
3400
+ return paragraphs.join(`
3401
+
3402
+ `);
3403
+ }
3404
+ return paragraphs.map((p) => `<p>${p}</p>`).join(`
3405
+ `);
3406
+ }
3407
+ return "";
3408
+ }
3409
+ renderCsrfTokenSync() {
3410
+ return '<input type="hidden" name="csrfmiddlewaretoken" value="CSRF_TOKEN_PLACEHOLDER">';
3411
+ }
3412
+ renderDebugSync(ctx) {
3413
+ const data = ctx.toObject?.() || {};
3414
+ return `<pre>${JSON.stringify(data, null, 2)}</pre>`;
3415
+ }
3416
+ renderTemplatetagSync(node) {
3417
+ const tagMap = {
3418
+ openblock: "{%",
3419
+ closeblock: "%}",
3420
+ openvariable: "{{",
3421
+ closevariable: "}}",
3422
+ openbrace: "{",
3423
+ closebrace: "}",
3424
+ opencomment: "{#",
3425
+ closecomment: "#}"
3426
+ };
3427
+ return tagMap[node.tagType] || "";
3428
+ }
2773
3429
  getDateInTimezone(d, tz) {
2774
3430
  if (!tz) {
2775
3431
  return {
@@ -3192,6 +3848,24 @@ class Runtime {
3192
3848
  return this.renderStaticSync(node, ctx);
3193
3849
  case "Now":
3194
3850
  return this.renderNowSync(node, ctx);
3851
+ case "Cycle":
3852
+ return this.renderCycleSync(node, ctx);
3853
+ case "Firstof":
3854
+ return this.renderFirstofSync(node, ctx);
3855
+ case "Ifchanged":
3856
+ return this.renderIfchangedSync(node, ctx);
3857
+ case "Regroup":
3858
+ return this.renderRegroupSync(node, ctx);
3859
+ case "Widthratio":
3860
+ return this.renderWidthratioSync(node, ctx);
3861
+ case "Lorem":
3862
+ return this.renderLoremSync(node, ctx);
3863
+ case "CsrfToken":
3864
+ return this.renderCsrfTokenSync();
3865
+ case "Debug":
3866
+ return this.renderDebugSync(ctx);
3867
+ case "Templatetag":
3868
+ return this.renderTemplatetagSync(node);
3195
3869
  default:
3196
3870
  return null;
3197
3871
  }
@@ -22,6 +22,16 @@ export declare class Parser {
22
22
  private parseNow;
23
23
  private parseComment;
24
24
  private parseSimpleBlock;
25
+ private parseCycle;
26
+ private parseFirstof;
27
+ private parseIfchanged;
28
+ private parseRegroup;
29
+ private parseWidthratio;
30
+ private parseLorem;
31
+ private parseCsrfToken;
32
+ private parseDebug;
33
+ private parseTemplatetag;
34
+ private parseIfequal;
25
35
  private parseExpression;
26
36
  private parseConditional;
27
37
  private parseOr;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAEV,YAAY,EA4Bb,MAAM,SAAS,CAAA;AAEhB,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAY;gBAEf,MAAM,EAAE,KAAK,EAAE;IAI3B,KAAK,IAAI,YAAY;IAgBrB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,OAAO;IA+Df,OAAO,CAAC,QAAQ;IAuEhB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,SAAS;IAiCjB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,QAAQ;IAqChB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,YAAY;IAgFpB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,WAAW;IA2DnB,OAAO,CAAC,YAAY;IAiEpB,OAAO,CAAC,YAAY;IAkFpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;CAId;AAED,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAEV,YAAY,EAsCb,MAAM,SAAS,CAAA;AAEhB,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAY;gBAEf,MAAM,EAAE,KAAK,EAAE;IAI3B,KAAK,IAAI,YAAY;IAgBrB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAkElB,OAAO,CAAC,OAAO;IA+Df,OAAO,CAAC,QAAQ;IAuEhB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,SAAS;IAiCjB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,QAAQ;IAqChB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,YAAY;IAmDpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,YAAY;IAgFpB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,WAAW;IA2DnB,OAAO,CAAC,YAAY;IAiEpB,OAAO,CAAC,YAAY;IAkFpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;CAId;AAED,cAAc,SAAS,CAAA"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AST Node definitions for Jinja2/DTL templates
3
3
  */
4
- export type NodeType = 'Template' | 'Text' | 'Output' | 'If' | 'For' | 'Block' | 'Extends' | 'Include' | 'Set' | 'With' | 'Macro' | 'Call' | 'Filter' | 'Comment' | 'Load' | 'Url' | 'Static' | 'Cache' | 'Now' | 'Name' | 'Literal' | 'Array' | 'Object' | 'BinaryOp' | 'UnaryOp' | 'Compare' | 'GetAttr' | 'GetItem' | 'FilterExpr' | 'TestExpr' | 'Conditional' | 'FunctionCall';
4
+ export type NodeType = 'Template' | 'Text' | 'Output' | 'If' | 'For' | 'Block' | 'Extends' | 'Include' | 'Set' | 'With' | 'Macro' | 'Call' | 'Filter' | 'Comment' | 'Load' | 'Url' | 'Static' | 'Cache' | 'Now' | 'Cycle' | 'Firstof' | 'Ifchanged' | 'Regroup' | 'Widthratio' | 'Lorem' | 'CsrfToken' | 'Debug' | 'Templatetag' | 'Name' | 'Literal' | 'Array' | 'Object' | 'BinaryOp' | 'UnaryOp' | 'Compare' | 'GetAttr' | 'GetItem' | 'FilterExpr' | 'TestExpr' | 'Conditional' | 'FunctionCall';
5
5
  export interface BaseNode {
6
6
  type: NodeType;
7
7
  line: number;
@@ -95,6 +95,53 @@ export interface NowNode extends BaseNode {
95
95
  format: ExpressionNode;
96
96
  asVar: string | null;
97
97
  }
98
+ export interface CycleNode extends BaseNode {
99
+ type: 'Cycle';
100
+ values: ExpressionNode[];
101
+ asVar: string | null;
102
+ silent: boolean;
103
+ }
104
+ export interface FirstofNode extends BaseNode {
105
+ type: 'Firstof';
106
+ values: ExpressionNode[];
107
+ fallback: ExpressionNode | null;
108
+ asVar: string | null;
109
+ }
110
+ export interface IfchangedNode extends BaseNode {
111
+ type: 'Ifchanged';
112
+ values: ExpressionNode[];
113
+ body: ASTNode[];
114
+ else_: ASTNode[];
115
+ }
116
+ export interface RegroupNode extends BaseNode {
117
+ type: 'Regroup';
118
+ target: ExpressionNode;
119
+ key: string;
120
+ asVar: string;
121
+ }
122
+ export interface WidthratioNode extends BaseNode {
123
+ type: 'Widthratio';
124
+ value: ExpressionNode;
125
+ maxValue: ExpressionNode;
126
+ maxWidth: ExpressionNode;
127
+ asVar: string | null;
128
+ }
129
+ export interface LoremNode extends BaseNode {
130
+ type: 'Lorem';
131
+ count: ExpressionNode | null;
132
+ method: 'w' | 'p' | 'b';
133
+ random: boolean;
134
+ }
135
+ export interface CsrfTokenNode extends BaseNode {
136
+ type: 'CsrfToken';
137
+ }
138
+ export interface DebugNode extends BaseNode {
139
+ type: 'Debug';
140
+ }
141
+ export interface TemplatetagNode extends BaseNode {
142
+ type: 'Templatetag';
143
+ tagType: 'openblock' | 'closeblock' | 'openvariable' | 'closevariable' | 'openbrace' | 'closebrace' | 'opencomment' | 'closecomment';
144
+ }
98
145
  export interface NameNode extends BaseNode {
99
146
  type: 'Name';
100
147
  name: string;
@@ -193,6 +240,6 @@ export interface FilterNode extends BaseNode {
193
240
  body: ASTNode[];
194
241
  }
195
242
  export type ExpressionNode = NameNode | LiteralNode | ArrayNode | ObjectNode | BinaryOpNode | UnaryOpNode | CompareNode | GetAttrNode | GetItemNode | FilterExprNode | TestExprNode | ConditionalNode | FunctionCallNode;
196
- export type StatementNode = TextNode | OutputNode | IfNode | ForNode | BlockNode | ExtendsNode | IncludeNode | SetNode | WithNode | LoadNode | UrlNode | StaticNode | CacheNode | NowNode | CommentNode | MacroNode | CallNode | FilterNode;
243
+ export type StatementNode = TextNode | OutputNode | IfNode | ForNode | BlockNode | ExtendsNode | IncludeNode | SetNode | WithNode | LoadNode | UrlNode | StaticNode | CacheNode | NowNode | CommentNode | MacroNode | CallNode | FilterNode | CycleNode | FirstofNode | IfchangedNode | RegroupNode | WidthratioNode | LoremNode | CsrfTokenNode | DebugNode | TemplatetagNode;
197
244
  export type ASTNode = StatementNode | ExpressionNode | TemplateNode;
198
245
  //# sourceMappingURL=nodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/parser/nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/parser/nodes.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,17 @@ export declare class Runtime {
40
40
  private renderUrlSync;
41
41
  private renderStaticSync;
42
42
  private renderNowSync;
43
+ private cycleState;
44
+ private renderCycleSync;
45
+ private renderFirstofSync;
46
+ private ifchangedState;
47
+ private renderIfchangedSync;
48
+ private renderRegroupSync;
49
+ private renderWidthratioSync;
50
+ private renderLoremSync;
51
+ private renderCsrfTokenSync;
52
+ private renderDebugSync;
53
+ private renderTemplatetagSync;
43
54
  private getDateInTimezone;
44
55
  private formatDate;
45
56
  private renderNodesSync;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAgB,YAAY,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,KAAK,EAEV,YAAY,EAcZ,cAAc,EAcf,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAA;IAChF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IACxD,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAoE;IACnF,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,cAAc,CAA4B;gBAEtC,OAAO,GAAE,cAAmB;IAkClC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBnF,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;IAiGrB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,UAAU;IA6ClB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,IAAI;IAiDZ,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IA+CnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,cAAc;YAWR,aAAa;YAYb,mBAAmB;YASnB,eAAe;YAkCf,aAAa;YAYb,cAAc;YA6Cd,gBAAgB;YAchB,aAAa;YAoBb,eAAe;YAUf,gBAAgB;IAUxB,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAOhE,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,UAAU;IA0BlB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,GAAG,IAAI;IAKjD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,GAAG,IAAI;IAK7C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;CAG1C;AAED,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "binja",
3
- "version": "0.4.6",
3
+ "version": "0.5.0",
4
4
  "description": "High-performance Jinja2/Django template engine for Bun",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",