@barefootjs/rust 0.35.1 → 0.35.3
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/emitters.d.ts.map +1 -1
- package/dist/adapter/index.js +11 -3
- package/dist/index.js +11 -3
- package/dist/vite.js +15 -7
- package/package.json +5 -5
- package/src/adapter/expr/emitters.ts +20 -6
|
@@ -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,EAIjB,KAAK,eAAe,EAIrB,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;
|
|
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
|
@@ -187691,6 +187691,11 @@ var PREDICATE_METHODS = new Set([
|
|
|
187691
187691
|
function truthyTest(node, rendered) {
|
|
187692
187692
|
return isBooleanResultParsed(node) ? rendered : `bf.truthy(${rendered})`;
|
|
187693
187693
|
}
|
|
187694
|
+
function flattenPropsMember(object, property) {
|
|
187695
|
+
if (object.kind === "identifier" && object.name === "props")
|
|
187696
|
+
return minijinjaIdent(property);
|
|
187697
|
+
return null;
|
|
187698
|
+
}
|
|
187694
187699
|
|
|
187695
187700
|
class JinjaFilterEmitter {
|
|
187696
187701
|
param;
|
|
@@ -187721,6 +187726,9 @@ class JinjaFilterEmitter {
|
|
|
187721
187726
|
return String(value);
|
|
187722
187727
|
}
|
|
187723
187728
|
member(object, property, _computed, _optional, emit) {
|
|
187729
|
+
const flat = flattenPropsMember(object, property);
|
|
187730
|
+
if (flat !== null)
|
|
187731
|
+
return flat;
|
|
187724
187732
|
if (property === "length") {
|
|
187725
187733
|
return `bf.length(${emit(object)})`;
|
|
187726
187734
|
}
|
|
@@ -187842,9 +187850,9 @@ class JinjaTopLevelEmitter {
|
|
|
187842
187850
|
return String(value);
|
|
187843
187851
|
}
|
|
187844
187852
|
member(object, property, _computed, _optional, emit) {
|
|
187845
|
-
|
|
187846
|
-
|
|
187847
|
-
|
|
187853
|
+
const flat = flattenPropsMember(object, property);
|
|
187854
|
+
if (flat !== null)
|
|
187855
|
+
return flat;
|
|
187848
187856
|
if (object.kind === "identifier") {
|
|
187849
187857
|
const staticValue = this.ctx._resolveStaticRecordLiteral(object.name, property);
|
|
187850
187858
|
if (staticValue !== null)
|
package/dist/index.js
CHANGED
|
@@ -187691,6 +187691,11 @@ var PREDICATE_METHODS = new Set([
|
|
|
187691
187691
|
function truthyTest(node, rendered) {
|
|
187692
187692
|
return isBooleanResultParsed(node) ? rendered : `bf.truthy(${rendered})`;
|
|
187693
187693
|
}
|
|
187694
|
+
function flattenPropsMember(object, property) {
|
|
187695
|
+
if (object.kind === "identifier" && object.name === "props")
|
|
187696
|
+
return minijinjaIdent(property);
|
|
187697
|
+
return null;
|
|
187698
|
+
}
|
|
187694
187699
|
|
|
187695
187700
|
class JinjaFilterEmitter {
|
|
187696
187701
|
param;
|
|
@@ -187721,6 +187726,9 @@ class JinjaFilterEmitter {
|
|
|
187721
187726
|
return String(value);
|
|
187722
187727
|
}
|
|
187723
187728
|
member(object, property, _computed, _optional, emit) {
|
|
187729
|
+
const flat = flattenPropsMember(object, property);
|
|
187730
|
+
if (flat !== null)
|
|
187731
|
+
return flat;
|
|
187724
187732
|
if (property === "length") {
|
|
187725
187733
|
return `bf.length(${emit(object)})`;
|
|
187726
187734
|
}
|
|
@@ -187842,9 +187850,9 @@ class JinjaTopLevelEmitter {
|
|
|
187842
187850
|
return String(value);
|
|
187843
187851
|
}
|
|
187844
187852
|
member(object, property, _computed, _optional, emit) {
|
|
187845
|
-
|
|
187846
|
-
|
|
187847
|
-
|
|
187853
|
+
const flat = flattenPropsMember(object, property);
|
|
187854
|
+
if (flat !== null)
|
|
187855
|
+
return flat;
|
|
187848
187856
|
if (object.kind === "identifier") {
|
|
187849
187857
|
const staticValue = this.ctx._resolveStaticRecordLiteral(object.name, property);
|
|
187850
187858
|
if (staticValue !== null)
|
package/dist/vite.js
CHANGED
|
@@ -3473,8 +3473,11 @@ function matchSearchParamsMethodCall(callee, args, localNames) {
|
|
|
3473
3473
|
// ../jsx/src/ir-to-client-js/prune-unused-prop-extractions.ts
|
|
3474
3474
|
import ts19 from "typescript";
|
|
3475
3475
|
|
|
3476
|
-
// ../jsx/src/ir-to-client-js/
|
|
3476
|
+
// ../jsx/src/ir-to-client-js/emit-reactive.ts
|
|
3477
3477
|
import ts20 from "typescript";
|
|
3478
|
+
|
|
3479
|
+
// ../jsx/src/ir-to-client-js/control-flow/plan/lazy-preamble.ts
|
|
3480
|
+
import ts21 from "typescript";
|
|
3478
3481
|
var NO_PREAMBLE = {
|
|
3479
3482
|
lazySafe: true,
|
|
3480
3483
|
facts: { declaredNames: new Set, freeNames: new Set }
|
|
@@ -3523,9 +3526,6 @@ var INERT_BINDING_GLOBALS = new Set([
|
|
|
3523
3526
|
"decodeURI"
|
|
3524
3527
|
]);
|
|
3525
3528
|
|
|
3526
|
-
// ../jsx/src/ir-to-client-js/emit-reactive.ts
|
|
3527
|
-
import ts21 from "typescript";
|
|
3528
|
-
|
|
3529
3529
|
// ../jsx/src/ir-to-client-js/control-flow/stringify/event-delegation.ts
|
|
3530
3530
|
var NON_BUBBLING_EVENTS = new Set([
|
|
3531
3531
|
"blur",
|
|
@@ -5616,6 +5616,11 @@ var PREDICATE_METHODS = new Set([
|
|
|
5616
5616
|
function truthyTest(node, rendered) {
|
|
5617
5617
|
return isBooleanResultParsed(node) ? rendered : `bf.truthy(${rendered})`;
|
|
5618
5618
|
}
|
|
5619
|
+
function flattenPropsMember(object, property) {
|
|
5620
|
+
if (object.kind === "identifier" && object.name === "props")
|
|
5621
|
+
return minijinjaIdent(property);
|
|
5622
|
+
return null;
|
|
5623
|
+
}
|
|
5619
5624
|
|
|
5620
5625
|
class JinjaFilterEmitter {
|
|
5621
5626
|
param;
|
|
@@ -5646,6 +5651,9 @@ class JinjaFilterEmitter {
|
|
|
5646
5651
|
return String(value);
|
|
5647
5652
|
}
|
|
5648
5653
|
member(object, property, _computed, _optional, emit) {
|
|
5654
|
+
const flat = flattenPropsMember(object, property);
|
|
5655
|
+
if (flat !== null)
|
|
5656
|
+
return flat;
|
|
5649
5657
|
if (property === "length") {
|
|
5650
5658
|
return `bf.length(${emit(object)})`;
|
|
5651
5659
|
}
|
|
@@ -5767,9 +5775,9 @@ class JinjaTopLevelEmitter {
|
|
|
5767
5775
|
return String(value);
|
|
5768
5776
|
}
|
|
5769
5777
|
member(object, property, _computed, _optional, emit) {
|
|
5770
|
-
|
|
5771
|
-
|
|
5772
|
-
|
|
5778
|
+
const flat = flattenPropsMember(object, property);
|
|
5779
|
+
if (flat !== null)
|
|
5780
|
+
return flat;
|
|
5773
5781
|
if (object.kind === "identifier") {
|
|
5774
5782
|
const staticValue = this.ctx._resolveStaticRecordLiteral(object.name, property);
|
|
5775
5783
|
if (staticValue !== null)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barefootjs/rust",
|
|
3
|
-
"version": "0.35.
|
|
3
|
+
"version": "0.35.3",
|
|
4
4
|
"description": "minijinja (Rust) adapter for BarefootJS — compiles IR to .j2 templates and ships a Rust rendering runtime (packages/adapter-rust/runtime/); runs under any Rust web framework (axum, etc.)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"directory": "packages/adapter-rust"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@barefootjs/shared": "0.35.
|
|
57
|
+
"@barefootjs/shared": "0.35.3"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"@barefootjs/jsx": ">=0.2.0",
|
|
@@ -71,9 +71,9 @@
|
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"@barefootjs/adapter-tests": "0.1.0",
|
|
74
|
-
"@barefootjs/jsx": "0.35.
|
|
75
|
-
"@barefootjs/vite": "0.35.
|
|
76
|
-
"@barefootjs/client": "0.35.
|
|
74
|
+
"@barefootjs/jsx": "0.35.3",
|
|
75
|
+
"@barefootjs/vite": "0.35.3",
|
|
76
|
+
"@barefootjs/client": "0.35.3",
|
|
77
77
|
"typescript": "^5.0.0",
|
|
78
78
|
"vite": "^6.0.0"
|
|
79
79
|
}
|
|
@@ -107,6 +107,22 @@ export function truthyTest(node: ParsedExpr, rendered: string): string {
|
|
|
107
107
|
return isBooleanResultParsed(node) ? rendered : `bf.truthy(${rendered})`
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
/**
|
|
111
|
+
* `props.x` on a bare-props-form component flattens to the bare context var
|
|
112
|
+
* the SSR caller binds each prop to (props arrive as individual top-level
|
|
113
|
+
* context entries, not a nested `props` dict). Single door for BOTH
|
|
114
|
+
* `member()` emitters below (#2886) — `JinjaFilterEmitter` (this adapter's
|
|
115
|
+
* minijinja filter emitter) lacked this decision entirely (#2879's
|
|
116
|
+
* cross-adapter follow-up), silently reaching `props.x`, and `props` is
|
|
117
|
+
* undefined in the predicate's context. Returns null for any other
|
|
118
|
+
* receiver so callers fall through to their generic member lowering —
|
|
119
|
+
* `props.a.b` flattens only the inner hop.
|
|
120
|
+
*/
|
|
121
|
+
function flattenPropsMember(object: ParsedExpr, property: string): string | null {
|
|
122
|
+
if (object.kind === 'identifier' && object.name === 'props') return minijinjaIdent(property)
|
|
123
|
+
return null
|
|
124
|
+
}
|
|
125
|
+
|
|
110
126
|
/**
|
|
111
127
|
* Lowering for the predicate body of a filter / every / some / find, plus the
|
|
112
128
|
* same shape used by the loop-hoist `.filter().map()` inline condition.
|
|
@@ -164,6 +180,8 @@ export class JinjaFilterEmitter implements ParsedExprEmitter {
|
|
|
164
180
|
}
|
|
165
181
|
|
|
166
182
|
member(object: ParsedExpr, property: string, _computed: boolean, _optional: boolean, emit: (e: ParsedExpr) => string): string {
|
|
183
|
+
const flat = flattenPropsMember(object, property)
|
|
184
|
+
if (flat !== null) return flat
|
|
167
185
|
// `.length` — route through `bf.length` (handles both array element
|
|
168
186
|
// count and string char count, JS-compatibly). Jinja's builtin
|
|
169
187
|
// `|length` filter also faults trying to match JS semantics for every
|
|
@@ -371,12 +389,8 @@ export class JinjaTopLevelEmitter implements ParsedExprEmitter {
|
|
|
371
389
|
}
|
|
372
390
|
|
|
373
391
|
member(object: ParsedExpr, property: string, _computed: boolean, _optional: boolean, emit: (e: ParsedExpr) => string): string {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
// nested `props` dict).
|
|
377
|
-
if (object.kind === 'identifier' && object.name === 'props') {
|
|
378
|
-
return minijinjaIdent(property)
|
|
379
|
-
}
|
|
392
|
+
const flat = flattenPropsMember(object, property)
|
|
393
|
+
if (flat !== null) return flat
|
|
380
394
|
// Static property access on a module object-literal const
|
|
381
395
|
// (`variantClasses.ghost`, #1897) resolves at compile time — the
|
|
382
396
|
// generic dot lowering below would reference a context var that
|