@barefootjs/jinja 0.18.3 → 0.18.5
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/dist/adapter/expr/array-method.d.ts.map +1 -1
- package/dist/adapter/expr/emitters.d.ts +2 -2
- package/dist/adapter/expr/emitters.d.ts.map +1 -1
- package/dist/adapter/index.js +52 -19
- package/dist/adapter/jinja-adapter.d.ts +8 -0
- package/dist/adapter/jinja-adapter.d.ts.map +1 -1
- package/dist/adapter/lib/constants.d.ts.map +1 -1
- package/dist/build.js +52 -19
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +54 -35
- package/dist/render-divergences.d.ts.map +1 -1
- package/package.json +3 -3
- package/python/barefootjs/runtime.py +64 -6
- package/python/tests/test_helper_vectors.py +6 -0
- package/python/tests/test_template_primitives.py +45 -0
- package/src/__tests__/jinja-adapter-unit.test.ts +21 -0
- package/src/adapter/expr/array-method.ts +19 -0
- package/src/adapter/expr/emitters.ts +30 -11
- package/src/adapter/jinja-adapter.ts +62 -8
- package/src/adapter/lib/constants.ts +3 -0
- package/src/conformance-pins.ts +0 -5
- package/src/render-divergences.ts +1 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-method.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/array-method.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAA;AAGxB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAAE,EAClB,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,
|
|
1
|
+
{"version":3,"file":"array-method.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/array-method.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAA;AAGxB,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAAE,EAClB,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,CAgJR;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,GAAG,IAAI,CAkBf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,EACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,EAC/B,OAAO,CAAC,EAAE,OAAO,GAChB,MAAM,GAAG,IAAI,CAMf;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,GAAG,IAAI,CAKf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CASxE;AAGD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,EACvC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,CAmBR"}
|
|
@@ -77,7 +77,7 @@ export declare class JinjaFilterEmitter implements ParsedExprEmitter {
|
|
|
77
77
|
constructor(param: string, localVarMap: Map<string, string>, isStringName?: (n: string) => boolean, onUnsupported?: ((message: string, reason?: string) => void) | undefined);
|
|
78
78
|
identifier(name: string): string;
|
|
79
79
|
literal(value: string | number | boolean | null, literalType: LiteralType): string;
|
|
80
|
-
member(object: ParsedExpr, property: string, _computed: boolean, emit: (e: ParsedExpr) => string): string;
|
|
80
|
+
member(object: ParsedExpr, property: string, _computed: boolean, _optional: boolean, emit: (e: ParsedExpr) => string): string;
|
|
81
81
|
indexAccess(object: ParsedExpr, index: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
82
82
|
call(callee: ParsedExpr, args: ParsedExpr[], emit: (e: ParsedExpr) => string): string;
|
|
83
83
|
unary(op: string, argument: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
@@ -112,7 +112,7 @@ export declare class JinjaTopLevelEmitter implements ParsedExprEmitter {
|
|
|
112
112
|
constructor(ctx: JinjaEmitContext);
|
|
113
113
|
identifier(name: string): string;
|
|
114
114
|
literal(value: string | number | boolean | null, literalType: LiteralType): string;
|
|
115
|
-
member(object: ParsedExpr, property: string, _computed: boolean, emit: (e: ParsedExpr) => string): string;
|
|
115
|
+
member(object: ParsedExpr, property: string, _computed: boolean, _optional: boolean, emit: (e: ParsedExpr) => string): string;
|
|
116
116
|
indexAccess(object: ParsedExpr, index: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
117
117
|
call(callee: ParsedExpr, args: ParsedExpr[], emit: (e: ParsedExpr) => string): string;
|
|
118
118
|
unary(op: string, argument: ParsedExpr, emit: (e: ParsedExpr) => string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitters.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/emitters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,YAAY,EAIlB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AA+B1D;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;IAExD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAI7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAPjC,YACmB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,YAAY,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAqB,EAIlD,aAAa,CAAC,GAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,aAAA,EACzE;IAEJ,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/B;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAKjF;IAED,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"emitters.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/emitters.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/index.js
CHANGED
|
@@ -187369,7 +187369,7 @@ function isAriaBooleanAttr(name) {
|
|
|
187369
187369
|
}
|
|
187370
187370
|
|
|
187371
187371
|
// src/adapter/jinja-adapter.ts
|
|
187372
|
-
import { BF_SLOT, BF_COND, BF_REGION } from "@barefootjs/shared";
|
|
187372
|
+
import { BF_SLOT, BF_COND, BF_REGION, escapeHtml } from "@barefootjs/shared";
|
|
187373
187373
|
|
|
187374
187374
|
// src/adapter/lib/constants.ts
|
|
187375
187375
|
var JINJA_TEMPLATE_PRIMITIVES = {
|
|
@@ -187378,7 +187378,10 @@ var JINJA_TEMPLATE_PRIMITIVES = {
|
|
|
187378
187378
|
Number: { arity: 1, emit: (args) => `bf.number(${args[0]})` },
|
|
187379
187379
|
"Math.floor": { arity: 1, emit: (args) => `bf.floor(${args[0]})` },
|
|
187380
187380
|
"Math.ceil": { arity: 1, emit: (args) => `bf.ceil(${args[0]})` },
|
|
187381
|
-
"Math.round": { arity: 1, emit: (args) => `bf.round(${args[0]})` }
|
|
187381
|
+
"Math.round": { arity: 1, emit: (args) => `bf.round(${args[0]})` },
|
|
187382
|
+
"Math.min": { arity: 2, emit: (args) => `bf.min(${args[0]}, ${args[1]})` },
|
|
187383
|
+
"Math.max": { arity: 2, emit: (args) => `bf.max(${args[0]}, ${args[1]})` },
|
|
187384
|
+
"Math.abs": { arity: 1, emit: (args) => `bf.abs(${args[0]})` }
|
|
187382
187385
|
};
|
|
187383
187386
|
var JINJA_PRIMITIVE_EMIT_MAP = Object.fromEntries(Object.entries(JINJA_TEMPLATE_PRIMITIVES).map(([k, v]) => [k, v.emit]));
|
|
187384
187387
|
|
|
@@ -187557,6 +187560,12 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
187557
187560
|
const recv = emit(object);
|
|
187558
187561
|
return `bf.trim(${recv})`;
|
|
187559
187562
|
}
|
|
187563
|
+
case "trimStart":
|
|
187564
|
+
case "trimEnd": {
|
|
187565
|
+
const fn = method === "trimStart" ? "trim_start" : "trim_end";
|
|
187566
|
+
const recv = emit(object);
|
|
187567
|
+
return `bf.${fn}(${recv})`;
|
|
187568
|
+
}
|
|
187560
187569
|
case "toFixed": {
|
|
187561
187570
|
const recv = emit(object);
|
|
187562
187571
|
const digits = args.length >= 1 ? emit(args[0]) : "0";
|
|
@@ -187590,6 +187599,12 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
187590
187599
|
const newS = emit(args[1]);
|
|
187591
187600
|
return `bf.replace(${recv}, ${oldS}, ${newS})`;
|
|
187592
187601
|
}
|
|
187602
|
+
case "replaceAll": {
|
|
187603
|
+
const recv = emit(object);
|
|
187604
|
+
const oldS = emit(args[0]);
|
|
187605
|
+
const newS = emit(args[1]);
|
|
187606
|
+
return `bf.replace_all(${recv}, ${oldS}, ${newS})`;
|
|
187607
|
+
}
|
|
187593
187608
|
case "repeat": {
|
|
187594
187609
|
const recv = emit(object);
|
|
187595
187610
|
const count = args.length === 0 ? "0" : emit(args[0]);
|
|
@@ -187686,6 +187701,7 @@ function renderFlatMethod(recv, depth, emit) {
|
|
|
187686
187701
|
|
|
187687
187702
|
// src/adapter/expr/emitters.ts
|
|
187688
187703
|
import {
|
|
187704
|
+
groupBinaryOperand,
|
|
187689
187705
|
identifierPath,
|
|
187690
187706
|
matchSearchParamsMethodCall,
|
|
187691
187707
|
sortComparatorFromArrow
|
|
@@ -187731,11 +187747,11 @@ class JinjaFilterEmitter {
|
|
|
187731
187747
|
return "none";
|
|
187732
187748
|
return String(value);
|
|
187733
187749
|
}
|
|
187734
|
-
member(object, property, _computed, emit) {
|
|
187750
|
+
member(object, property, _computed, _optional, emit) {
|
|
187735
187751
|
if (property === "length") {
|
|
187736
187752
|
return `bf.length(${emit(object)})`;
|
|
187737
187753
|
}
|
|
187738
|
-
return `${emit(object)}
|
|
187754
|
+
return `${emit(object)}['${escapeJinjaSingleQuoted(property)}']`;
|
|
187739
187755
|
}
|
|
187740
187756
|
indexAccess(object, index, emit) {
|
|
187741
187757
|
return `${emit(object)}[${emit(index)}]`;
|
|
@@ -187754,8 +187770,8 @@ class JinjaFilterEmitter {
|
|
|
187754
187770
|
return emit(argument);
|
|
187755
187771
|
}
|
|
187756
187772
|
binary(op, left, right, emit) {
|
|
187757
|
-
const l = emit(left);
|
|
187758
|
-
const r = emit(right);
|
|
187773
|
+
const l = groupBinaryOperand(left, emit(left));
|
|
187774
|
+
const r = groupBinaryOperand(right, emit(right));
|
|
187759
187775
|
const opMap = {
|
|
187760
187776
|
"===": "==",
|
|
187761
187777
|
"!==": "!=",
|
|
@@ -187837,7 +187853,7 @@ class JinjaTopLevelEmitter {
|
|
|
187837
187853
|
return "none";
|
|
187838
187854
|
return String(value);
|
|
187839
187855
|
}
|
|
187840
|
-
member(object, property, _computed, emit) {
|
|
187856
|
+
member(object, property, _computed, _optional, emit) {
|
|
187841
187857
|
if (object.kind === "identifier" && object.name === "props") {
|
|
187842
187858
|
return jinjaIdent(property);
|
|
187843
187859
|
}
|
|
@@ -187849,7 +187865,7 @@ class JinjaTopLevelEmitter {
|
|
|
187849
187865
|
const obj = emit(object);
|
|
187850
187866
|
if (property === "length")
|
|
187851
187867
|
return `bf.length(${obj})`;
|
|
187852
|
-
return `${obj}
|
|
187868
|
+
return `${obj}['${escapeJinjaSingleQuoted(property)}']`;
|
|
187853
187869
|
}
|
|
187854
187870
|
indexAccess(object, index, emit) {
|
|
187855
187871
|
return `${emit(object)}[${emit(index)}]`;
|
|
@@ -187883,8 +187899,8 @@ class JinjaTopLevelEmitter {
|
|
|
187883
187899
|
return emit(argument);
|
|
187884
187900
|
}
|
|
187885
187901
|
binary(op, left, right, emit) {
|
|
187886
|
-
const l = emit(left);
|
|
187887
|
-
const r = emit(right);
|
|
187902
|
+
const l = groupBinaryOperand(left, emit(left));
|
|
187903
|
+
const r = groupBinaryOperand(right, emit(right));
|
|
187888
187904
|
const opMap = {
|
|
187889
187905
|
"===": "==",
|
|
187890
187906
|
"!==": "!=",
|
|
@@ -188256,6 +188272,7 @@ class JinjaAdapter extends BaseAdapter {
|
|
|
188256
188272
|
options;
|
|
188257
188273
|
errors = [];
|
|
188258
188274
|
inLoop = false;
|
|
188275
|
+
currentLoopKeyDepth = 0;
|
|
188259
188276
|
propsObjectName = null;
|
|
188260
188277
|
propsParams = [];
|
|
188261
188278
|
booleanTypedProps = new Set;
|
|
@@ -188332,7 +188349,7 @@ class JinjaAdapter extends BaseAdapter {
|
|
|
188332
188349
|
return this.renderElement(node);
|
|
188333
188350
|
}
|
|
188334
188351
|
emitText(node) {
|
|
188335
|
-
return node.value;
|
|
188352
|
+
return escapeHtml(node.value);
|
|
188336
188353
|
}
|
|
188337
188354
|
emitExpression(node) {
|
|
188338
188355
|
return this.renderExpression(node);
|
|
@@ -188563,7 +188580,7 @@ ${whenTrue}
|
|
|
188563
188580
|
const renderedChildren = this.renderChildren(loop.children);
|
|
188564
188581
|
const loopVar = loop.iterationShape === "keys" ? "__bf_item" : supportableDestructure ? "__bf_item" : param;
|
|
188565
188582
|
const indexLocalLines = [];
|
|
188566
|
-
if (loop.iterationShape === "keys") {
|
|
188583
|
+
if (loop.objectIteration) {} else if (loop.iterationShape === "keys") {
|
|
188567
188584
|
indexLocalLines.push(`{% set ${jinjaIdent(param)} = loop.index0 %}`);
|
|
188568
188585
|
} else if (loop.index) {
|
|
188569
188586
|
indexLocalLines.push(`{% set ${jinjaIdent(loop.index)} = loop.index0 %}`);
|
|
@@ -188583,13 +188600,17 @@ ${whenTrue}
|
|
|
188583
188600
|
}
|
|
188584
188601
|
const prevInLoop = this.inLoop;
|
|
188585
188602
|
this.inLoop = true;
|
|
188603
|
+
const prevLoopKeyDepth = this.currentLoopKeyDepth;
|
|
188604
|
+
this.currentLoopKeyDepth = loop.depth;
|
|
188586
188605
|
const childrenUnderLoop = this.renderChildren(loop.children);
|
|
188606
|
+
this.currentLoopKeyDepth = prevLoopKeyDepth;
|
|
188587
188607
|
this.inLoop = prevInLoop;
|
|
188588
188608
|
const bodyChildren = loop.bodyIsItemConditional && loop.key ? `{{ bf.comment("loop-i:" ~ bf.string(${this.convertExpressionToJinja(loop.key)})) | safe }}
|
|
188589
188609
|
${childrenUnderLoop}` : childrenUnderLoop;
|
|
188590
188610
|
const lines = [];
|
|
188591
188611
|
lines.push(`{{ bf.comment("loop:${loop.markerId}") | safe }}`);
|
|
188592
|
-
|
|
188612
|
+
const forHeader = loop.objectIteration === "entries" ? `{% for ${jinjaIdent(loop.index ?? param)}, ${jinjaIdent(param)} in ${array}.items() %}` : loop.objectIteration === "keys" ? `{% for ${jinjaIdent(param)} in ${array}.keys() %}` : loop.objectIteration === "values" ? `{% for ${jinjaIdent(param)} in ${array}.values() %}` : `{% for ${jinjaIdent(loopVar)} in ${array} %}`;
|
|
188613
|
+
lines.push(forHeader);
|
|
188593
188614
|
for (const il of indexLocalLines)
|
|
188594
188615
|
lines.push(il);
|
|
188595
188616
|
if (loop.filterPredicate) {
|
|
@@ -188661,9 +188682,20 @@ ${childrenUnderLoop}` : childrenUnderLoop;
|
|
|
188661
188682
|
renderComponent(comp) {
|
|
188662
188683
|
const segments = [{ kind: "entries", parts: [] }];
|
|
188663
188684
|
const currentEntries = () => this.componentPropSegmentEntries(segments);
|
|
188685
|
+
const namedSlotSetBlocks = [];
|
|
188664
188686
|
for (const p of comp.props) {
|
|
188665
188687
|
if ((p.name.match(/^on[A-Z]/) || p.name === "ref") && p.value.kind === "expression")
|
|
188666
188688
|
continue;
|
|
188689
|
+
if (p.value.kind === "jsx-children" && p.name !== "children") {
|
|
188690
|
+
const prevInLoop = this.inLoop;
|
|
188691
|
+
this.inLoop = false;
|
|
188692
|
+
const slotBody = this.renderChildren(p.value.children);
|
|
188693
|
+
this.inLoop = prevInLoop;
|
|
188694
|
+
const captureName = `bf_prop_${this.childrenCaptureCounter++}`;
|
|
188695
|
+
namedSlotSetBlocks.push(`{% set ${captureName} %}${slotBody}{% endset %}`);
|
|
188696
|
+
currentEntries().push(`${jinjaHashKey(p.name)}: ${captureName}`);
|
|
188697
|
+
continue;
|
|
188698
|
+
}
|
|
188667
188699
|
if (p.value.kind === "spread") {
|
|
188668
188700
|
const trimmed = p.value.expr.trim();
|
|
188669
188701
|
if (this.propsObjectName && this.propsObjectName === trimmed) {
|
|
@@ -188692,11 +188724,11 @@ ${childrenUnderLoop}` : childrenUnderLoop;
|
|
|
188692
188724
|
const captureName = `bf_children_${comp.slotId ?? "c" + this.childrenCaptureCounter++}`;
|
|
188693
188725
|
currentEntries().push(`${jinjaHashKey("children")}: ${captureName}`);
|
|
188694
188726
|
const dict = this.combineComponentPropSegments(segments);
|
|
188695
|
-
return
|
|
188727
|
+
return `${namedSlotSetBlocks.join("")}{% set ${captureName} %}${childrenBody}{% endset %}{{ bf.render_child('${tplName}', ${dict}) | safe }}`;
|
|
188696
188728
|
}
|
|
188697
188729
|
const isEmpty = segments.every((s) => s.kind === "entries" && s.parts.length === 0);
|
|
188698
188730
|
const dictEntries = isEmpty ? "" : `, ${this.combineComponentPropSegments(segments)}`;
|
|
188699
|
-
return
|
|
188731
|
+
return `${namedSlotSetBlocks.join("")}{{ bf.render_child('${tplName}'${dictEntries}) | safe }}`;
|
|
188700
188732
|
}
|
|
188701
188733
|
childrenCaptureCounter = 0;
|
|
188702
188734
|
presenceVarCounter = 0;
|
|
@@ -188741,7 +188773,7 @@ ${alternate}
|
|
|
188741
188773
|
${children}`;
|
|
188742
188774
|
}
|
|
188743
188775
|
elementAttrEmitter = {
|
|
188744
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
188776
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
188745
188777
|
emitExpression: (value, name) => {
|
|
188746
188778
|
if (name === "style") {
|
|
188747
188779
|
const css = this.tryLowerStyleObject(value.expr);
|
|
@@ -188849,9 +188881,10 @@ ${name}="{{ bf.string(${val}) }}"
|
|
|
188849
188881
|
let attrName;
|
|
188850
188882
|
if (attr.name === "className")
|
|
188851
188883
|
attrName = "class";
|
|
188852
|
-
else if (attr.name === "key")
|
|
188853
|
-
|
|
188854
|
-
|
|
188884
|
+
else if (attr.name === "key") {
|
|
188885
|
+
const depth = this.currentLoopKeyDepth;
|
|
188886
|
+
attrName = depth > 0 ? `data-key-${depth}` : "data-key";
|
|
188887
|
+
} else
|
|
188855
188888
|
attrName = attr.name;
|
|
188856
188889
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attrName);
|
|
188857
188890
|
if (lowered)
|
|
@@ -113,6 +113,14 @@ export declare class JinjaAdapter extends BaseAdapter implements IRNodeEmitter<J
|
|
|
113
113
|
private options;
|
|
114
114
|
private errors;
|
|
115
115
|
private inLoop;
|
|
116
|
+
/**
|
|
117
|
+
* `IRLoop.depth` of the loop currently being rendered (save/restore
|
|
118
|
+
* around `renderChildren(loop.children)`, mirroring `inLoop` above).
|
|
119
|
+
* `renderAttributes` reads this to derive the `key` → `data-key`/
|
|
120
|
+
* `data-key-N` suffix — the depth is IR-computed (jsx-to-ir.ts), not
|
|
121
|
+
* re-derived here (#2168 nested-loop-outer-binding).
|
|
122
|
+
*/
|
|
123
|
+
private currentLoopKeyDepth;
|
|
116
124
|
/**
|
|
117
125
|
* SolidJS-style props identifier (`function(props: P)`) and the
|
|
118
126
|
* analyzer-extracted prop names. Stashed at `generate()` entry so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jinja-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/jinja-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,YAAY,EACZ,aAAa,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,UAAU,EACV,OAAO,EAKP,yBAAyB,EAE1B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAClB,KAAK,UAAU,EAyBhB,MAAM,iBAAiB,CAAA;AAKxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAiCpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,qBAAa,YAAa,SAAQ,WAAY,YAAW,aAAa,CAAC,cAAc,CAAC;IACpF,IAAI,SAAU;IACd,SAAS,SAAW;IACpB,qBAAqB,UAAO;IAG5B,kBAAkB,EAAG,cAAc,CAAS;IAE5C;;;;;OAKG;IACH,kBAAkB,EAAE,yBAAyB,CAA2B;IAExE,OAAO,CAAC,aAAa,CAAa;IAClC;;;uCAGmC;IACnC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAiB;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,iBAAiB,CAAyB;IAClD;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB,CAAiC;IAE3D;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB,CAAyB;IAEpD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAAwB;IAEjD;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAAmC;IAEzD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB,CAAyB;IAEtD,YAAY,OAAO,GAAE,mBAAwB,EAM5C;IAED,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,aAAa,CA4EzE;IAMD,OAAO,CAAC,2BAA2B;IAyBnC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/B;IAMD,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAE5F;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"jinja-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/jinja-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,YAAY,EACZ,aAAa,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,UAAU,EACV,OAAO,EAKP,yBAAyB,EAE1B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAClB,KAAK,UAAU,EAyBhB,MAAM,iBAAiB,CAAA;AAKxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAiCpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,qBAAa,YAAa,SAAQ,WAAY,YAAW,aAAa,CAAC,cAAc,CAAC;IACpF,IAAI,SAAU;IACd,SAAS,SAAW;IACpB,qBAAqB,UAAO;IAG5B,kBAAkB,EAAG,cAAc,CAAS;IAE5C;;;;;OAKG;IACH,kBAAkB,EAAE,yBAAyB,CAA2B;IAExE,OAAO,CAAC,aAAa,CAAa;IAClC;;;uCAGmC;IACnC,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAiB;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB,CAAI;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,iBAAiB,CAAyB;IAClD;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB,CAAiC;IAE3D;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB,CAAyB;IAEpD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAAwB;IAEjD;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAAmC;IAEzD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB,CAAyB;IAEtD,YAAY,OAAO,GAAE,mBAAwB,EAM5C;IAED,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,aAAa,CA4EzE;IAMD,OAAO,CAAC,2BAA2B;IAyBnC;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/B;IAMD,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAE5F;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7B;IAED,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEzC;IAED,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAEpG;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAEtF;IAED,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAEhG;IAED,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAE9F;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7B;IAED,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAEpG;IAED,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAe9F;IAED,uEAAuE;IACvE,OAAO,CAAC,kBAAkB;IAmB1B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,0BAA0B;IAYlC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,MAAM,CAExF;IAMD,aAAa,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAoCxC;IAMD,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAiB3C;IAMD,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAuC7C;IAED,OAAO,CAAC,gBAAgB;IAOxB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAcnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmP/B;IAMD;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAoCpC;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,2BAA2B;IAUnC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,4BAA4B;IAiBpC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAoGzC;IAED,OAAO,CAAC,sBAAsB,CAAI;IAElC;+DAC2D;IAC3D,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,UAAU;IAYT,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQ1C;IAMD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA0JlC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAmB3B,8EAA8E;IAC9E,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;IA8BxB,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAIjD;IAED,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvC;IAED,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvC;IAMD;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,kCAAkC;IA8B1C;;;;;OAKG;IACH,OAAO,CAAC,iCAAiC;IAmBzC;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;IAuBvC;;;;;;;OAOG;IACH,OAAO,KAAK,OAAO,GASlB;IAED;;;;;OAKG;IACH,OAAO,KAAK,SAAS,GASpB;IAED,sEAAsE;IACtE,OAAO,KAAK,OAAO,GAKlB;IAED,OAAO,CAAC,wBAAwB;IAyEhC;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAI/B;;gFAE4E;IAC5E,OAAO,CAAC,kBAAkB;IAI1B;;;;OAIG;IACH,8BAA8B,CAC5B,IAAI,EAAE,MAAM,GACX;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAgBlD;IAED,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO3C;IAED;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,gBAAgB;IAcxB,iFAAiF;IACjF,OAAO,CAAC,4BAA4B;CAGrC;AAED,eAAO,MAAM,YAAY,cAAqB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/adapter/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/adapter/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAUnE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAG7E,CAAA"}
|
package/dist/build.js
CHANGED
|
@@ -187369,7 +187369,7 @@ function isAriaBooleanAttr(name) {
|
|
|
187369
187369
|
}
|
|
187370
187370
|
|
|
187371
187371
|
// src/adapter/jinja-adapter.ts
|
|
187372
|
-
import { BF_SLOT, BF_COND, BF_REGION } from "@barefootjs/shared";
|
|
187372
|
+
import { BF_SLOT, BF_COND, BF_REGION, escapeHtml } from "@barefootjs/shared";
|
|
187373
187373
|
|
|
187374
187374
|
// src/adapter/lib/constants.ts
|
|
187375
187375
|
var JINJA_TEMPLATE_PRIMITIVES = {
|
|
@@ -187378,7 +187378,10 @@ var JINJA_TEMPLATE_PRIMITIVES = {
|
|
|
187378
187378
|
Number: { arity: 1, emit: (args) => `bf.number(${args[0]})` },
|
|
187379
187379
|
"Math.floor": { arity: 1, emit: (args) => `bf.floor(${args[0]})` },
|
|
187380
187380
|
"Math.ceil": { arity: 1, emit: (args) => `bf.ceil(${args[0]})` },
|
|
187381
|
-
"Math.round": { arity: 1, emit: (args) => `bf.round(${args[0]})` }
|
|
187381
|
+
"Math.round": { arity: 1, emit: (args) => `bf.round(${args[0]})` },
|
|
187382
|
+
"Math.min": { arity: 2, emit: (args) => `bf.min(${args[0]}, ${args[1]})` },
|
|
187383
|
+
"Math.max": { arity: 2, emit: (args) => `bf.max(${args[0]}, ${args[1]})` },
|
|
187384
|
+
"Math.abs": { arity: 1, emit: (args) => `bf.abs(${args[0]})` }
|
|
187382
187385
|
};
|
|
187383
187386
|
var JINJA_PRIMITIVE_EMIT_MAP = Object.fromEntries(Object.entries(JINJA_TEMPLATE_PRIMITIVES).map(([k, v]) => [k, v.emit]));
|
|
187384
187387
|
|
|
@@ -187557,6 +187560,12 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
187557
187560
|
const recv = emit(object);
|
|
187558
187561
|
return `bf.trim(${recv})`;
|
|
187559
187562
|
}
|
|
187563
|
+
case "trimStart":
|
|
187564
|
+
case "trimEnd": {
|
|
187565
|
+
const fn = method === "trimStart" ? "trim_start" : "trim_end";
|
|
187566
|
+
const recv = emit(object);
|
|
187567
|
+
return `bf.${fn}(${recv})`;
|
|
187568
|
+
}
|
|
187560
187569
|
case "toFixed": {
|
|
187561
187570
|
const recv = emit(object);
|
|
187562
187571
|
const digits = args.length >= 1 ? emit(args[0]) : "0";
|
|
@@ -187590,6 +187599,12 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
187590
187599
|
const newS = emit(args[1]);
|
|
187591
187600
|
return `bf.replace(${recv}, ${oldS}, ${newS})`;
|
|
187592
187601
|
}
|
|
187602
|
+
case "replaceAll": {
|
|
187603
|
+
const recv = emit(object);
|
|
187604
|
+
const oldS = emit(args[0]);
|
|
187605
|
+
const newS = emit(args[1]);
|
|
187606
|
+
return `bf.replace_all(${recv}, ${oldS}, ${newS})`;
|
|
187607
|
+
}
|
|
187593
187608
|
case "repeat": {
|
|
187594
187609
|
const recv = emit(object);
|
|
187595
187610
|
const count = args.length === 0 ? "0" : emit(args[0]);
|
|
@@ -187686,6 +187701,7 @@ function renderFlatMethod(recv, depth, emit) {
|
|
|
187686
187701
|
|
|
187687
187702
|
// src/adapter/expr/emitters.ts
|
|
187688
187703
|
import {
|
|
187704
|
+
groupBinaryOperand,
|
|
187689
187705
|
identifierPath,
|
|
187690
187706
|
matchSearchParamsMethodCall,
|
|
187691
187707
|
sortComparatorFromArrow
|
|
@@ -187731,11 +187747,11 @@ class JinjaFilterEmitter {
|
|
|
187731
187747
|
return "none";
|
|
187732
187748
|
return String(value);
|
|
187733
187749
|
}
|
|
187734
|
-
member(object, property, _computed, emit) {
|
|
187750
|
+
member(object, property, _computed, _optional, emit) {
|
|
187735
187751
|
if (property === "length") {
|
|
187736
187752
|
return `bf.length(${emit(object)})`;
|
|
187737
187753
|
}
|
|
187738
|
-
return `${emit(object)}
|
|
187754
|
+
return `${emit(object)}['${escapeJinjaSingleQuoted(property)}']`;
|
|
187739
187755
|
}
|
|
187740
187756
|
indexAccess(object, index, emit) {
|
|
187741
187757
|
return `${emit(object)}[${emit(index)}]`;
|
|
@@ -187754,8 +187770,8 @@ class JinjaFilterEmitter {
|
|
|
187754
187770
|
return emit(argument);
|
|
187755
187771
|
}
|
|
187756
187772
|
binary(op, left, right, emit) {
|
|
187757
|
-
const l = emit(left);
|
|
187758
|
-
const r = emit(right);
|
|
187773
|
+
const l = groupBinaryOperand(left, emit(left));
|
|
187774
|
+
const r = groupBinaryOperand(right, emit(right));
|
|
187759
187775
|
const opMap = {
|
|
187760
187776
|
"===": "==",
|
|
187761
187777
|
"!==": "!=",
|
|
@@ -187837,7 +187853,7 @@ class JinjaTopLevelEmitter {
|
|
|
187837
187853
|
return "none";
|
|
187838
187854
|
return String(value);
|
|
187839
187855
|
}
|
|
187840
|
-
member(object, property, _computed, emit) {
|
|
187856
|
+
member(object, property, _computed, _optional, emit) {
|
|
187841
187857
|
if (object.kind === "identifier" && object.name === "props") {
|
|
187842
187858
|
return jinjaIdent(property);
|
|
187843
187859
|
}
|
|
@@ -187849,7 +187865,7 @@ class JinjaTopLevelEmitter {
|
|
|
187849
187865
|
const obj = emit(object);
|
|
187850
187866
|
if (property === "length")
|
|
187851
187867
|
return `bf.length(${obj})`;
|
|
187852
|
-
return `${obj}
|
|
187868
|
+
return `${obj}['${escapeJinjaSingleQuoted(property)}']`;
|
|
187853
187869
|
}
|
|
187854
187870
|
indexAccess(object, index, emit) {
|
|
187855
187871
|
return `${emit(object)}[${emit(index)}]`;
|
|
@@ -187883,8 +187899,8 @@ class JinjaTopLevelEmitter {
|
|
|
187883
187899
|
return emit(argument);
|
|
187884
187900
|
}
|
|
187885
187901
|
binary(op, left, right, emit) {
|
|
187886
|
-
const l = emit(left);
|
|
187887
|
-
const r = emit(right);
|
|
187902
|
+
const l = groupBinaryOperand(left, emit(left));
|
|
187903
|
+
const r = groupBinaryOperand(right, emit(right));
|
|
187888
187904
|
const opMap = {
|
|
187889
187905
|
"===": "==",
|
|
187890
187906
|
"!==": "!=",
|
|
@@ -188256,6 +188272,7 @@ class JinjaAdapter extends BaseAdapter {
|
|
|
188256
188272
|
options;
|
|
188257
188273
|
errors = [];
|
|
188258
188274
|
inLoop = false;
|
|
188275
|
+
currentLoopKeyDepth = 0;
|
|
188259
188276
|
propsObjectName = null;
|
|
188260
188277
|
propsParams = [];
|
|
188261
188278
|
booleanTypedProps = new Set;
|
|
@@ -188332,7 +188349,7 @@ class JinjaAdapter extends BaseAdapter {
|
|
|
188332
188349
|
return this.renderElement(node);
|
|
188333
188350
|
}
|
|
188334
188351
|
emitText(node) {
|
|
188335
|
-
return node.value;
|
|
188352
|
+
return escapeHtml(node.value);
|
|
188336
188353
|
}
|
|
188337
188354
|
emitExpression(node) {
|
|
188338
188355
|
return this.renderExpression(node);
|
|
@@ -188563,7 +188580,7 @@ ${whenTrue}
|
|
|
188563
188580
|
const renderedChildren = this.renderChildren(loop.children);
|
|
188564
188581
|
const loopVar = loop.iterationShape === "keys" ? "__bf_item" : supportableDestructure ? "__bf_item" : param;
|
|
188565
188582
|
const indexLocalLines = [];
|
|
188566
|
-
if (loop.iterationShape === "keys") {
|
|
188583
|
+
if (loop.objectIteration) {} else if (loop.iterationShape === "keys") {
|
|
188567
188584
|
indexLocalLines.push(`{% set ${jinjaIdent(param)} = loop.index0 %}`);
|
|
188568
188585
|
} else if (loop.index) {
|
|
188569
188586
|
indexLocalLines.push(`{% set ${jinjaIdent(loop.index)} = loop.index0 %}`);
|
|
@@ -188583,13 +188600,17 @@ ${whenTrue}
|
|
|
188583
188600
|
}
|
|
188584
188601
|
const prevInLoop = this.inLoop;
|
|
188585
188602
|
this.inLoop = true;
|
|
188603
|
+
const prevLoopKeyDepth = this.currentLoopKeyDepth;
|
|
188604
|
+
this.currentLoopKeyDepth = loop.depth;
|
|
188586
188605
|
const childrenUnderLoop = this.renderChildren(loop.children);
|
|
188606
|
+
this.currentLoopKeyDepth = prevLoopKeyDepth;
|
|
188587
188607
|
this.inLoop = prevInLoop;
|
|
188588
188608
|
const bodyChildren = loop.bodyIsItemConditional && loop.key ? `{{ bf.comment("loop-i:" ~ bf.string(${this.convertExpressionToJinja(loop.key)})) | safe }}
|
|
188589
188609
|
${childrenUnderLoop}` : childrenUnderLoop;
|
|
188590
188610
|
const lines = [];
|
|
188591
188611
|
lines.push(`{{ bf.comment("loop:${loop.markerId}") | safe }}`);
|
|
188592
|
-
|
|
188612
|
+
const forHeader = loop.objectIteration === "entries" ? `{% for ${jinjaIdent(loop.index ?? param)}, ${jinjaIdent(param)} in ${array}.items() %}` : loop.objectIteration === "keys" ? `{% for ${jinjaIdent(param)} in ${array}.keys() %}` : loop.objectIteration === "values" ? `{% for ${jinjaIdent(param)} in ${array}.values() %}` : `{% for ${jinjaIdent(loopVar)} in ${array} %}`;
|
|
188613
|
+
lines.push(forHeader);
|
|
188593
188614
|
for (const il of indexLocalLines)
|
|
188594
188615
|
lines.push(il);
|
|
188595
188616
|
if (loop.filterPredicate) {
|
|
@@ -188661,9 +188682,20 @@ ${childrenUnderLoop}` : childrenUnderLoop;
|
|
|
188661
188682
|
renderComponent(comp) {
|
|
188662
188683
|
const segments = [{ kind: "entries", parts: [] }];
|
|
188663
188684
|
const currentEntries = () => this.componentPropSegmentEntries(segments);
|
|
188685
|
+
const namedSlotSetBlocks = [];
|
|
188664
188686
|
for (const p of comp.props) {
|
|
188665
188687
|
if ((p.name.match(/^on[A-Z]/) || p.name === "ref") && p.value.kind === "expression")
|
|
188666
188688
|
continue;
|
|
188689
|
+
if (p.value.kind === "jsx-children" && p.name !== "children") {
|
|
188690
|
+
const prevInLoop = this.inLoop;
|
|
188691
|
+
this.inLoop = false;
|
|
188692
|
+
const slotBody = this.renderChildren(p.value.children);
|
|
188693
|
+
this.inLoop = prevInLoop;
|
|
188694
|
+
const captureName = `bf_prop_${this.childrenCaptureCounter++}`;
|
|
188695
|
+
namedSlotSetBlocks.push(`{% set ${captureName} %}${slotBody}{% endset %}`);
|
|
188696
|
+
currentEntries().push(`${jinjaHashKey(p.name)}: ${captureName}`);
|
|
188697
|
+
continue;
|
|
188698
|
+
}
|
|
188667
188699
|
if (p.value.kind === "spread") {
|
|
188668
188700
|
const trimmed = p.value.expr.trim();
|
|
188669
188701
|
if (this.propsObjectName && this.propsObjectName === trimmed) {
|
|
@@ -188692,11 +188724,11 @@ ${childrenUnderLoop}` : childrenUnderLoop;
|
|
|
188692
188724
|
const captureName = `bf_children_${comp.slotId ?? "c" + this.childrenCaptureCounter++}`;
|
|
188693
188725
|
currentEntries().push(`${jinjaHashKey("children")}: ${captureName}`);
|
|
188694
188726
|
const dict = this.combineComponentPropSegments(segments);
|
|
188695
|
-
return
|
|
188727
|
+
return `${namedSlotSetBlocks.join("")}{% set ${captureName} %}${childrenBody}{% endset %}{{ bf.render_child('${tplName}', ${dict}) | safe }}`;
|
|
188696
188728
|
}
|
|
188697
188729
|
const isEmpty = segments.every((s) => s.kind === "entries" && s.parts.length === 0);
|
|
188698
188730
|
const dictEntries = isEmpty ? "" : `, ${this.combineComponentPropSegments(segments)}`;
|
|
188699
|
-
return
|
|
188731
|
+
return `${namedSlotSetBlocks.join("")}{{ bf.render_child('${tplName}'${dictEntries}) | safe }}`;
|
|
188700
188732
|
}
|
|
188701
188733
|
childrenCaptureCounter = 0;
|
|
188702
188734
|
presenceVarCounter = 0;
|
|
@@ -188741,7 +188773,7 @@ ${alternate}
|
|
|
188741
188773
|
${children}`;
|
|
188742
188774
|
}
|
|
188743
188775
|
elementAttrEmitter = {
|
|
188744
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
188776
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
188745
188777
|
emitExpression: (value, name) => {
|
|
188746
188778
|
if (name === "style") {
|
|
188747
188779
|
const css = this.tryLowerStyleObject(value.expr);
|
|
@@ -188849,9 +188881,10 @@ ${name}="{{ bf.string(${val}) }}"
|
|
|
188849
188881
|
let attrName;
|
|
188850
188882
|
if (attr.name === "className")
|
|
188851
188883
|
attrName = "class";
|
|
188852
|
-
else if (attr.name === "key")
|
|
188853
|
-
|
|
188854
|
-
|
|
188884
|
+
else if (attr.name === "key") {
|
|
188885
|
+
const depth = this.currentLoopKeyDepth;
|
|
188886
|
+
attrName = depth > 0 ? `data-key-${depth}` : "data-key";
|
|
188887
|
+
} else
|
|
188855
188888
|
attrName = attr.name;
|
|
188856
188889
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attrName);
|
|
188857
188890
|
if (lowered)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance-pins.d.ts","sourceRoot":"","sources":["../src/conformance-pins.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"conformance-pins.d.ts","sourceRoot":"","sources":["../src/conformance-pins.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,eA8F7B,CAAA"}
|