@barefootjs/rust 0.18.4 → 0.18.7
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 +118 -18
- package/dist/adapter/lib/constants.d.ts.map +1 -1
- package/dist/adapter/lib/static-value.d.ts +13 -0
- package/dist/adapter/lib/static-value.d.ts.map +1 -0
- package/dist/adapter/minijinja-adapter.d.ts +49 -0
- package/dist/adapter/minijinja-adapter.d.ts.map +1 -1
- package/dist/build.js +118 -18
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +120 -35
- package/dist/render-divergences.d.ts.map +1 -1
- package/package.json +3 -3
- package/runtime/src/num.rs +30 -0
- package/runtime/src/runtime.rs +78 -10
- package/runtime/tests/helper_vectors.rs +6 -0
- package/runtime/tests/template_primitives.rs +42 -0
- package/src/__tests__/minijinja-adapter-unit.test.ts +140 -0
- package/src/adapter/expr/array-method.ts +19 -0
- package/src/adapter/expr/emitters.ts +2 -2
- package/src/adapter/lib/constants.ts +3 -0
- package/src/adapter/lib/static-value.ts +39 -0
- package/src/adapter/minijinja-adapter.ts +170 -13
- package/src/conformance-pins.ts +24 -30
- package/src/render-divergences.ts +4 -16
- package/src/test-render.ts +11 -144
|
@@ -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
|
@@ -187308,7 +187308,13 @@ import {
|
|
|
187308
187308
|
prepareLoweringMatchers,
|
|
187309
187309
|
queryHrefArgs,
|
|
187310
187310
|
isValidHelperId,
|
|
187311
|
-
sortComparatorFromArrow as sortComparatorFromArrow2
|
|
187311
|
+
sortComparatorFromArrow as sortComparatorFromArrow2,
|
|
187312
|
+
isDangerousInnerHtmlAttr,
|
|
187313
|
+
resolveDangerousInnerHtml,
|
|
187314
|
+
dangerousInnerHtmlMetacharViolation,
|
|
187315
|
+
dangerousInnerHtmlDiagnostic,
|
|
187316
|
+
resolveStaticLoopSource,
|
|
187317
|
+
collectLoopBoundNames
|
|
187312
187318
|
} from "@barefootjs/jsx";
|
|
187313
187319
|
|
|
187314
187320
|
// src/adapter/boolean-result.ts
|
|
@@ -187369,7 +187375,7 @@ function isAriaBooleanAttr(name) {
|
|
|
187369
187375
|
}
|
|
187370
187376
|
|
|
187371
187377
|
// src/adapter/minijinja-adapter.ts
|
|
187372
|
-
import { BF_SLOT, BF_COND, BF_REGION } from "@barefootjs/shared";
|
|
187378
|
+
import { BF_SLOT, BF_COND, BF_REGION, escapeHtml } from "@barefootjs/shared";
|
|
187373
187379
|
|
|
187374
187380
|
// src/adapter/lib/constants.ts
|
|
187375
187381
|
var JINJA_TEMPLATE_PRIMITIVES = {
|
|
@@ -187378,7 +187384,10 @@ var JINJA_TEMPLATE_PRIMITIVES = {
|
|
|
187378
187384
|
Number: { arity: 1, emit: (args) => `bf.number(${args[0]})` },
|
|
187379
187385
|
"Math.floor": { arity: 1, emit: (args) => `bf.floor(${args[0]})` },
|
|
187380
187386
|
"Math.ceil": { arity: 1, emit: (args) => `bf.ceil(${args[0]})` },
|
|
187381
|
-
"Math.round": { arity: 1, emit: (args) => `bf.round(${args[0]})` }
|
|
187387
|
+
"Math.round": { arity: 1, emit: (args) => `bf.round(${args[0]})` },
|
|
187388
|
+
"Math.min": { arity: 2, emit: (args) => `bf.min(${args[0]}, ${args[1]})` },
|
|
187389
|
+
"Math.max": { arity: 2, emit: (args) => `bf.max(${args[0]}, ${args[1]})` },
|
|
187390
|
+
"Math.abs": { arity: 1, emit: (args) => `bf.abs(${args[0]})` }
|
|
187382
187391
|
};
|
|
187383
187392
|
var JINJA_PRIMITIVE_EMIT_MAP = Object.fromEntries(Object.entries(JINJA_TEMPLATE_PRIMITIVES).map(([k, v]) => [k, v.emit]));
|
|
187384
187393
|
|
|
@@ -187544,6 +187553,12 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
187544
187553
|
const recv = emit(object);
|
|
187545
187554
|
return `bf.trim(${recv})`;
|
|
187546
187555
|
}
|
|
187556
|
+
case "trimStart":
|
|
187557
|
+
case "trimEnd": {
|
|
187558
|
+
const fn = method === "trimStart" ? "trim_start" : "trim_end";
|
|
187559
|
+
const recv = emit(object);
|
|
187560
|
+
return `bf.${fn}(${recv})`;
|
|
187561
|
+
}
|
|
187547
187562
|
case "toFixed": {
|
|
187548
187563
|
const recv = emit(object);
|
|
187549
187564
|
const digits = args.length >= 1 ? emit(args[0]) : "0";
|
|
@@ -187577,6 +187592,12 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
187577
187592
|
const newS = emit(args[1]);
|
|
187578
187593
|
return `bf.replace(${recv}, ${oldS}, ${newS})`;
|
|
187579
187594
|
}
|
|
187595
|
+
case "replaceAll": {
|
|
187596
|
+
const recv = emit(object);
|
|
187597
|
+
const oldS = emit(args[0]);
|
|
187598
|
+
const newS = emit(args[1]);
|
|
187599
|
+
return `bf.replace_all(${recv}, ${oldS}, ${newS})`;
|
|
187600
|
+
}
|
|
187580
187601
|
case "repeat": {
|
|
187581
187602
|
const recv = emit(object);
|
|
187582
187603
|
const count = args.length === 0 ? "0" : emit(args[0]);
|
|
@@ -187671,6 +187692,39 @@ function renderFlatMethod(recv, depth, emit) {
|
|
|
187671
187692
|
return `bf.flat(${recv}, ${d})`;
|
|
187672
187693
|
}
|
|
187673
187694
|
|
|
187695
|
+
// src/adapter/lib/static-value.ts
|
|
187696
|
+
function staticValueToMinijinja(value) {
|
|
187697
|
+
if (value === null || value === undefined)
|
|
187698
|
+
return "none";
|
|
187699
|
+
if (typeof value === "boolean")
|
|
187700
|
+
return value ? "true" : "false";
|
|
187701
|
+
if (typeof value === "number")
|
|
187702
|
+
return String(value);
|
|
187703
|
+
if (typeof value === "string")
|
|
187704
|
+
return `'${escapeMinijinjaSingleQuoted(value)}'`;
|
|
187705
|
+
if (Array.isArray(value)) {
|
|
187706
|
+
const items = [];
|
|
187707
|
+
for (const el of value) {
|
|
187708
|
+
const serialized = staticValueToMinijinja(el);
|
|
187709
|
+
if (serialized === null)
|
|
187710
|
+
return null;
|
|
187711
|
+
items.push(serialized);
|
|
187712
|
+
}
|
|
187713
|
+
return `[${items.join(", ")}]`;
|
|
187714
|
+
}
|
|
187715
|
+
if (typeof value === "object") {
|
|
187716
|
+
const entries = [];
|
|
187717
|
+
for (const [key, val] of Object.entries(value)) {
|
|
187718
|
+
const serialized = staticValueToMinijinja(val);
|
|
187719
|
+
if (serialized === null)
|
|
187720
|
+
return null;
|
|
187721
|
+
entries.push(`${minijinjaHashKey(key)}: ${serialized}`);
|
|
187722
|
+
}
|
|
187723
|
+
return `{${entries.join(", ")}}`;
|
|
187724
|
+
}
|
|
187725
|
+
return null;
|
|
187726
|
+
}
|
|
187727
|
+
|
|
187674
187728
|
// src/adapter/expr/emitters.ts
|
|
187675
187729
|
import {
|
|
187676
187730
|
groupBinaryOperand,
|
|
@@ -187719,7 +187773,7 @@ class JinjaFilterEmitter {
|
|
|
187719
187773
|
return "none";
|
|
187720
187774
|
return String(value);
|
|
187721
187775
|
}
|
|
187722
|
-
member(object, property, _computed, emit) {
|
|
187776
|
+
member(object, property, _computed, _optional, emit) {
|
|
187723
187777
|
if (property === "length") {
|
|
187724
187778
|
return `bf.length(${emit(object)})`;
|
|
187725
187779
|
}
|
|
@@ -187825,7 +187879,7 @@ class JinjaTopLevelEmitter {
|
|
|
187825
187879
|
return "none";
|
|
187826
187880
|
return String(value);
|
|
187827
187881
|
}
|
|
187828
|
-
member(object, property, _computed, emit) {
|
|
187882
|
+
member(object, property, _computed, _optional, emit) {
|
|
187829
187883
|
if (object.kind === "identifier" && object.name === "props") {
|
|
187830
187884
|
return minijinjaIdent(property);
|
|
187831
187885
|
}
|
|
@@ -188252,6 +188306,7 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188252
188306
|
options;
|
|
188253
188307
|
errors = [];
|
|
188254
188308
|
inLoop = false;
|
|
188309
|
+
currentLoopKeyDepth = 0;
|
|
188255
188310
|
propsObjectName = null;
|
|
188256
188311
|
propsParams = [];
|
|
188257
188312
|
booleanTypedProps = new Set;
|
|
@@ -188260,6 +188315,7 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188260
188315
|
_searchParamsLocals = new Set;
|
|
188261
188316
|
_loweringMatchers = [];
|
|
188262
188317
|
localConstants = [];
|
|
188318
|
+
staticLoopSourceBoundNames = new Set;
|
|
188263
188319
|
nullableOptionalProps = new Set;
|
|
188264
188320
|
constructor(options = {}) {
|
|
188265
188321
|
super();
|
|
@@ -188275,6 +188331,7 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188275
188331
|
this.propsParams = ir.metadata.propsParams.map((p) => ({ name: p.name }));
|
|
188276
188332
|
this.booleanTypedProps = collectBooleanTypedProps(ir);
|
|
188277
188333
|
this.localConstants = ir.metadata.localConstants ?? [];
|
|
188334
|
+
this.staticLoopSourceBoundNames = collectLoopBoundNames(ir);
|
|
188278
188335
|
this.nullableOptionalProps = collectNullableOptionalProps(ir);
|
|
188279
188336
|
this.stringValueNames = collectStringValueNames(ir);
|
|
188280
188337
|
this.moduleStringConsts = collectModuleStringConsts(ir.metadata.localConstants);
|
|
@@ -188328,7 +188385,7 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188328
188385
|
return this.renderElement(node);
|
|
188329
188386
|
}
|
|
188330
188387
|
emitText(node) {
|
|
188331
|
-
return node.value;
|
|
188388
|
+
return escapeHtml(node.value);
|
|
188332
188389
|
}
|
|
188333
188390
|
emitExpression(node) {
|
|
188334
188391
|
return this.renderExpression(node);
|
|
@@ -188396,7 +188453,8 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188396
188453
|
renderElement(element) {
|
|
188397
188454
|
const tag = element.tag;
|
|
188398
188455
|
const attrs = this.renderAttributes(element);
|
|
188399
|
-
const
|
|
188456
|
+
const dangerousHtml = this.renderDangerousInnerHtml(element);
|
|
188457
|
+
const children = dangerousHtml !== null ? dangerousHtml : this.renderChildren(element.children);
|
|
188400
188458
|
let hydrationAttrs = "";
|
|
188401
188459
|
if (element.needsScope) {
|
|
188402
188460
|
hydrationAttrs += ` ${this.renderScopeMarker("")}`;
|
|
@@ -188431,6 +188489,22 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188431
188489
|
}
|
|
188432
188490
|
return `<${tag}${attrs}${hydrationAttrs}>${children}</${tag}>`;
|
|
188433
188491
|
}
|
|
188492
|
+
renderDangerousInnerHtml(element) {
|
|
188493
|
+
const resolution = resolveDangerousInnerHtml(element);
|
|
188494
|
+
if (!resolution)
|
|
188495
|
+
return null;
|
|
188496
|
+
if (resolution.kind === "dynamic") {
|
|
188497
|
+
this.errors.push(dangerousInnerHtmlDiagnostic(resolution.expr, resolution.loc));
|
|
188498
|
+
return "";
|
|
188499
|
+
}
|
|
188500
|
+
const violation = dangerousInnerHtmlMetacharViolation(resolution.html, this.name);
|
|
188501
|
+
if (violation) {
|
|
188502
|
+
const attr = element.attrs.find(isDangerousInnerHtmlAttr);
|
|
188503
|
+
this.errors.push(dangerousInnerHtmlDiagnostic(`{ __html: ${JSON.stringify(resolution.html)} }`, attr.loc, violation));
|
|
188504
|
+
return "";
|
|
188505
|
+
}
|
|
188506
|
+
return resolution.html;
|
|
188507
|
+
}
|
|
188434
188508
|
renderExpression(expr) {
|
|
188435
188509
|
if (expr.clientOnly) {
|
|
188436
188510
|
if (expr.slotId) {
|
|
@@ -188438,7 +188512,7 @@ class MinijinjaAdapter extends BaseAdapter {
|
|
|
188438
188512
|
}
|
|
188439
188513
|
return "";
|
|
188440
188514
|
}
|
|
188441
|
-
const jinjaExpr = `bf.string(${this.convertExpressionToJinja(expr.expr)})`;
|
|
188515
|
+
const jinjaExpr = `bf.string(${this.convertExpressionToJinja(expr.expr, expr.parsed)})`;
|
|
188442
188516
|
if (expr.slotId) {
|
|
188443
188517
|
return `{{ bf.text_start("${expr.slotId}") | safe }}{{ ${jinjaExpr} }}{{ bf.text_end() | safe }}`;
|
|
188444
188518
|
}
|
|
@@ -188529,8 +188603,12 @@ ${whenTrue}
|
|
|
188529
188603
|
}
|
|
188530
188604
|
});
|
|
188531
188605
|
}
|
|
188606
|
+
const staticItems = resolveStaticLoopSource(loop.arrayParsed, this.localConstants, {
|
|
188607
|
+
isNameShadowed: (name) => this.staticLoopSourceBoundNames.has(name)
|
|
188608
|
+
});
|
|
188609
|
+
const staticArray = staticItems !== null ? staticValueToMinijinja(staticItems) : null;
|
|
188532
188610
|
const arrayName = loop.array.trim();
|
|
188533
|
-
if (/^[A-Za-z_$][\w$]*$/.test(arrayName)) {
|
|
188611
|
+
if (staticArray === null && /^[A-Za-z_$][\w$]*$/.test(arrayName)) {
|
|
188534
188612
|
const arrayConst = (this.localConstants ?? []).find((c) => c.name === arrayName);
|
|
188535
188613
|
if (arrayConst && !arrayConst.isModule && this._resolveLiteralConst(arrayName) === null) {
|
|
188536
188614
|
this.errors.push({
|
|
@@ -188544,7 +188622,7 @@ ${whenTrue}
|
|
|
188544
188622
|
});
|
|
188545
188623
|
}
|
|
188546
188624
|
}
|
|
188547
|
-
const rawArray = this.convertExpressionToJinja(loop.array);
|
|
188625
|
+
const rawArray = staticArray ?? this.convertExpressionToJinja(loop.array);
|
|
188548
188626
|
let array = rawArray;
|
|
188549
188627
|
if (loop.sortComparator) {
|
|
188550
188628
|
const sort = loop.sortComparator;
|
|
@@ -188558,7 +188636,7 @@ ${whenTrue}
|
|
|
188558
188636
|
const renderedChildren = this.renderChildren(loop.children);
|
|
188559
188637
|
const loopVar = loop.iterationShape === "keys" ? "__bf_item" : supportableDestructure ? "__bf_item" : param;
|
|
188560
188638
|
const indexLocalLines = [];
|
|
188561
|
-
if (loop.iterationShape === "keys") {
|
|
188639
|
+
if (loop.objectIteration) {} else if (loop.iterationShape === "keys") {
|
|
188562
188640
|
indexLocalLines.push(`{% set ${minijinjaIdent(param)} = loop.index0 %}`);
|
|
188563
188641
|
} else if (loop.index) {
|
|
188564
188642
|
indexLocalLines.push(`{% set ${minijinjaIdent(loop.index)} = loop.index0 %}`);
|
|
@@ -188578,13 +188656,17 @@ ${whenTrue}
|
|
|
188578
188656
|
}
|
|
188579
188657
|
const prevInLoop = this.inLoop;
|
|
188580
188658
|
this.inLoop = true;
|
|
188659
|
+
const prevLoopKeyDepth = this.currentLoopKeyDepth;
|
|
188660
|
+
this.currentLoopKeyDepth = loop.depth;
|
|
188581
188661
|
const childrenUnderLoop = this.renderChildren(loop.children);
|
|
188662
|
+
this.currentLoopKeyDepth = prevLoopKeyDepth;
|
|
188582
188663
|
this.inLoop = prevInLoop;
|
|
188583
188664
|
const bodyChildren = loop.bodyIsItemConditional && loop.key ? `{{ bf.comment("loop-i:" ~ bf.string(${this.convertExpressionToJinja(loop.key)})) | safe }}
|
|
188584
188665
|
${childrenUnderLoop}` : childrenUnderLoop;
|
|
188585
188666
|
const lines = [];
|
|
188586
188667
|
lines.push(`{{ bf.comment("loop:${loop.markerId}") | safe }}`);
|
|
188587
|
-
|
|
188668
|
+
const forHeader = loop.objectIteration === "entries" ? `{% for ${minijinjaIdent(loop.index ?? param)}, ${minijinjaIdent(param)} in ${array}|items %}` : loop.objectIteration === "keys" ? `{% for ${minijinjaIdent(param)}, __bf_v in ${array}|items %}` : loop.objectIteration === "values" ? `{% for __bf_k, ${minijinjaIdent(param)} in ${array}|items %}` : `{% for ${minijinjaIdent(loopVar)} in ${array} %}`;
|
|
188669
|
+
lines.push(forHeader);
|
|
188588
188670
|
for (const il of indexLocalLines)
|
|
188589
188671
|
lines.push(il);
|
|
188590
188672
|
if (loop.filterPredicate) {
|
|
@@ -188656,9 +188738,20 @@ ${childrenUnderLoop}` : childrenUnderLoop;
|
|
|
188656
188738
|
renderComponent(comp) {
|
|
188657
188739
|
const segments = [{ kind: "entries", parts: [] }];
|
|
188658
188740
|
const currentEntries = () => this.componentPropSegmentEntries(segments);
|
|
188741
|
+
const namedSlotSetBlocks = [];
|
|
188659
188742
|
for (const p of comp.props) {
|
|
188660
188743
|
if ((p.name.match(/^on[A-Z]/) || p.name === "ref") && p.value.kind === "expression")
|
|
188661
188744
|
continue;
|
|
188745
|
+
if (p.value.kind === "jsx-children" && p.name !== "children") {
|
|
188746
|
+
const prevInLoop = this.inLoop;
|
|
188747
|
+
this.inLoop = false;
|
|
188748
|
+
const slotBody = this.renderChildren(p.value.children);
|
|
188749
|
+
this.inLoop = prevInLoop;
|
|
188750
|
+
const captureName = `bf_prop_${this.childrenCaptureCounter++}`;
|
|
188751
|
+
namedSlotSetBlocks.push(`{% set ${captureName} %}${slotBody}{% endset %}`);
|
|
188752
|
+
currentEntries().push(`${minijinjaHashKey(p.name)}: ${captureName}`);
|
|
188753
|
+
continue;
|
|
188754
|
+
}
|
|
188662
188755
|
if (p.value.kind === "spread") {
|
|
188663
188756
|
const trimmed = p.value.expr.trim();
|
|
188664
188757
|
if (this.propsObjectName && this.propsObjectName === trimmed) {
|
|
@@ -188687,11 +188780,11 @@ ${childrenUnderLoop}` : childrenUnderLoop;
|
|
|
188687
188780
|
const captureName = `bf_children_${comp.slotId ?? "c" + this.childrenCaptureCounter++}`;
|
|
188688
188781
|
currentEntries().push(`${minijinjaHashKey("children")}: ${captureName}`);
|
|
188689
188782
|
const dict = this.combineComponentPropSegments(segments);
|
|
188690
|
-
return
|
|
188783
|
+
return `${namedSlotSetBlocks.join("")}{% set ${captureName} %}${childrenBody}{% endset %}{{ bf.render_child('${tplName}', ${dict}) | safe }}`;
|
|
188691
188784
|
}
|
|
188692
188785
|
const isEmpty = segments.every((s) => s.kind === "entries" && s.parts.length === 0);
|
|
188693
188786
|
const dictEntries = isEmpty ? "" : `, ${this.combineComponentPropSegments(segments)}`;
|
|
188694
|
-
return
|
|
188787
|
+
return `${namedSlotSetBlocks.join("")}{{ bf.render_child('${tplName}'${dictEntries}) | safe }}`;
|
|
188695
188788
|
}
|
|
188696
188789
|
childrenCaptureCounter = 0;
|
|
188697
188790
|
presenceVarCounter = 0;
|
|
@@ -188736,7 +188829,7 @@ ${alternate}
|
|
|
188736
188829
|
${children}`;
|
|
188737
188830
|
}
|
|
188738
188831
|
elementAttrEmitter = {
|
|
188739
|
-
emitLiteral: (value, name) => `${name}="${value.value}"`,
|
|
188832
|
+
emitLiteral: (value, name) => `${name}="${escapeHtml(value.value)}"`,
|
|
188740
188833
|
emitExpression: (value, name) => {
|
|
188741
188834
|
if (name === "style") {
|
|
188742
188835
|
const css = this.tryLowerStyleObject(value.expr);
|
|
@@ -188841,12 +188934,15 @@ ${name}="{{ bf.string(${val}) }}"
|
|
|
188841
188934
|
for (const attr of element.attrs) {
|
|
188842
188935
|
if (attr.clientOnly)
|
|
188843
188936
|
continue;
|
|
188937
|
+
if (isDangerousInnerHtmlAttr(attr))
|
|
188938
|
+
continue;
|
|
188844
188939
|
let attrName;
|
|
188845
188940
|
if (attr.name === "className")
|
|
188846
188941
|
attrName = "class";
|
|
188847
|
-
else if (attr.name === "key")
|
|
188848
|
-
|
|
188849
|
-
|
|
188942
|
+
else if (attr.name === "key") {
|
|
188943
|
+
const depth = this.currentLoopKeyDepth;
|
|
188944
|
+
attrName = depth > 0 ? `data-key-${depth}` : "data-key";
|
|
188945
|
+
} else
|
|
188850
188946
|
attrName = attr.name;
|
|
188851
188947
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attrName);
|
|
188852
188948
|
if (lowered)
|
|
@@ -189039,6 +189135,8 @@ Options:
|
|
|
189039
189135
|
return isBooleanResultExpr(expr) || isAriaBooleanAttr(name) || this.isBooleanTypedPropRef(expr);
|
|
189040
189136
|
}
|
|
189041
189137
|
_resolveLiteralConst(name) {
|
|
189138
|
+
if (this.staticLoopSourceBoundNames.has(name))
|
|
189139
|
+
return null;
|
|
189042
189140
|
const c = (this.localConstants ?? []).find((lc) => lc.name === name);
|
|
189043
189141
|
if (c?.value === undefined)
|
|
189044
189142
|
return null;
|
|
@@ -189051,6 +189149,8 @@ Options:
|
|
|
189051
189149
|
return null;
|
|
189052
189150
|
}
|
|
189053
189151
|
_resolveStaticRecordLiteral(objectName, key) {
|
|
189152
|
+
if (this.staticLoopSourceBoundNames.has(objectName))
|
|
189153
|
+
return null;
|
|
189054
189154
|
const hit = lookupStaticRecordLiteral(objectName, key, this.localConstants);
|
|
189055
189155
|
if (!hit)
|
|
189056
189156
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/adapter/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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;;;;;;;;GAQG;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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize a compile-time-evaluated JS value (`@barefootjs/jsx`'s
|
|
3
|
+
* `evaluateStaticLiteral`/`resolveStaticLoopSource`, #2208) into a native
|
|
4
|
+
* MiniJinja literal. Used to inline a fully-static loop source (an inline
|
|
5
|
+
* array literal, or a function-scope local const with a static
|
|
6
|
+
* initializer) directly in a `{% for %}` header, rather than requiring a
|
|
7
|
+
* bound template variable.
|
|
8
|
+
*
|
|
9
|
+
* Returns `null` for a value this adapter can't represent as a literal —
|
|
10
|
+
* the caller falls back to its existing BF101 refusal instead of guessing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function staticValueToMinijinja(value: unknown): string | null;
|
|
13
|
+
//# sourceMappingURL=static-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-value.d.ts","sourceRoot":"","sources":["../../../src/adapter/lib/static-value.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAwBpE"}
|
|
@@ -138,6 +138,14 @@ export declare class MinijinjaAdapter extends BaseAdapter implements IRNodeEmitt
|
|
|
138
138
|
private options;
|
|
139
139
|
private errors;
|
|
140
140
|
private inLoop;
|
|
141
|
+
/**
|
|
142
|
+
* `IRLoop.depth` of the loop currently being rendered (save/restore
|
|
143
|
+
* around `renderChildren(loop.children)`, mirroring `inLoop` above).
|
|
144
|
+
* `renderAttributes` reads this to derive the `key` → `data-key`/
|
|
145
|
+
* `data-key-N` suffix — the depth is IR-computed (jsx-to-ir.ts), not
|
|
146
|
+
* re-derived here (#2168 nested-loop-outer-binding).
|
|
147
|
+
*/
|
|
148
|
+
private currentLoopKeyDepth;
|
|
141
149
|
/**
|
|
142
150
|
* SolidJS-style props identifier (`function(props: P)`) and the
|
|
143
151
|
* analyzer-extracted prop names. Stashed at `generate()` entry so the
|
|
@@ -185,6 +193,16 @@ export declare class MinijinjaAdapter extends BaseAdapter implements IRNodeEmitt
|
|
|
185
193
|
* const (`const sizeAttrs = size ? {…} : {}`) to its initializer text.
|
|
186
194
|
*/
|
|
187
195
|
private localConstants;
|
|
196
|
+
/**
|
|
197
|
+
* Every name a `.map()`/`.filter()` loop callback binds as its item/index
|
|
198
|
+
* parameter anywhere in the component (#2208 fable review). A static
|
|
199
|
+
* loop-SOURCE name (e.g. a function-scope `const items = [...]`) must
|
|
200
|
+
* never resolve through `resolveStaticLoopSource` at a use site where a
|
|
201
|
+
* DIFFERENT, enclosing loop's own callback param shadows it — same
|
|
202
|
+
* shadowing hazard, and same coarse-but-safe mitigation, as #2212's
|
|
203
|
+
* `collectLoopBoundNames` use in `collectStringValueNames`.
|
|
204
|
+
*/
|
|
205
|
+
private staticLoopSourceBoundNames;
|
|
188
206
|
/**
|
|
189
207
|
* Optional, no-default props that are `None` when the caller omits them.
|
|
190
208
|
* Their bare-reference attribute emission is guarded with a Jinja
|
|
@@ -236,6 +254,13 @@ export declare class MinijinjaAdapter extends BaseAdapter implements IRNodeEmitt
|
|
|
236
254
|
private providerObjectLiteralJinja;
|
|
237
255
|
emitAsync(node: IRAsync, _ctx: JinjaRenderCtx, _emit: EmitIRNode<JinjaRenderCtx>): string;
|
|
238
256
|
renderElement(element: IRElement): string;
|
|
257
|
+
/**
|
|
258
|
+
* `dangerouslySetInnerHTML={{ __html: '...' }}` (#2207) — see the Blade
|
|
259
|
+
* adapter's identical helper for the full rationale. `null` means the
|
|
260
|
+
* attribute is absent (caller falls through to normal `renderChildren`);
|
|
261
|
+
* a non-`null` string (possibly `''`) replaces the children outright.
|
|
262
|
+
*/
|
|
263
|
+
private renderDangerousInnerHtml;
|
|
239
264
|
renderExpression(expr: IRExpression): string;
|
|
240
265
|
renderConditional(cond: IRConditional): string;
|
|
241
266
|
private renderNodeOrNull;
|
|
@@ -409,8 +434,32 @@ export declare class MinijinjaAdapter extends BaseAdapter implements IRNodeEmitt
|
|
|
409
434
|
* single-quoted string literal (`const totalPages = 5`, #1897
|
|
410
435
|
* pagination) — function-scope consts never reach the per-render
|
|
411
436
|
* context, so a bare reference would resolve to Undefined.
|
|
437
|
+
*
|
|
438
|
+
* The lookup is a flat name match with no notion of AST scope, so a
|
|
439
|
+
* name that any loop callback binds as its item/index param never
|
|
440
|
+
* inlines (#2221) — the occurrence may be the loop's own (shadowing)
|
|
441
|
+
* binding, and substituting the outer const's value there renders every
|
|
442
|
+
* iteration with the same hard-coded literal. Coarse (a genuinely
|
|
443
|
+
* non-shadowed same-named const elsewhere in the component also stops
|
|
444
|
+
* inlining, falling back to the bare identifier) but safe — the same
|
|
445
|
+
* trade-off as #2212's `collectLoopBoundNames` use in
|
|
446
|
+
* `collectStringValueNames`.
|
|
412
447
|
*/
|
|
413
448
|
private _resolveLiteralConst;
|
|
449
|
+
/**
|
|
450
|
+
* Resolve `IDENT.key` where `IDENT` is a module-scope object-literal const
|
|
451
|
+
* (`variantClasses.ghost`, #1896/#1897) to the looked-up scalar.
|
|
452
|
+
*
|
|
453
|
+
* The lookup is a flat name match on `objectName` with no notion of AST
|
|
454
|
+
* scope, so an enclosing loop callback's own param of the same name
|
|
455
|
+
* (`.map((cfg) => <li>{cfg.x}</li>)` shadowing a module `const cfg = {…}`)
|
|
456
|
+
* still resolved to the OUTER const's member value at every iteration
|
|
457
|
+
* (#2237) — the sibling hazard to #2221's `_resolveLiteralConst`. Same
|
|
458
|
+
* coarse-but-safe `staticLoopSourceBoundNames` guard: any name a loop
|
|
459
|
+
* binds anywhere in the component never inlines, falling back to the bare
|
|
460
|
+
* `cfg.x` member expression (which a minijinja `for` loop binds correctly
|
|
461
|
+
* at the shadowed occurrences).
|
|
462
|
+
*/
|
|
414
463
|
private _resolveStaticRecordLiteral;
|
|
415
464
|
private _resolveModuleStringConst;
|
|
416
465
|
private _recordExprBF101;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minijinja-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/minijinja-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiHG;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,
|
|
1
|
+
{"version":3,"file":"minijinja-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/minijinja-adapter.ts"],"names":[],"mappings":"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"}
|