@barefootjs/mojolicious 0.19.0 → 0.20.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/dist/adapter/expr/array-method.d.ts.map +1 -1
- package/dist/adapter/expr/emitters.d.ts.map +1 -1
- package/dist/adapter/index.js +9 -7
- package/dist/adapter/lib/constants.d.ts.map +1 -1
- package/dist/adapter/mojo-adapter.d.ts +9 -6
- package/dist/adapter/mojo-adapter.d.ts.map +1 -1
- package/dist/build.js +9 -7
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +11 -8
- package/lib/BarefootJS/Backend/Mojo.pm +1 -1
- package/lib/Mojolicious/Plugin/BarefootJS/DevReload.pm +1 -1
- package/lib/Mojolicious/Plugin/BarefootJS.pm +1 -1
- package/package.json +3 -3
- package/src/__tests__/mojo-adapter.test.ts +13 -34
- package/src/adapter/expr/array-method.ts +12 -6
- package/src/adapter/expr/emitters.ts +6 -1
- package/src/adapter/lib/constants.ts +8 -0
- package/src/adapter/mojo-adapter.ts +14 -25
- package/src/conformance-pins.ts +7 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-method.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/array-method.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAA;AAExB;;;;;;;;GAQG;AACH,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;;;;;;;GAOG;AAMH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAA;AAExB;;;;;;;;GAQG;AACH,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,CAsOR;AA6BD;;;;;;;;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,CAOf;AAED;;;;;;;GAOG;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,CAmBf;AAED;;;;;;;;;;;GAWG;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;;;;;;;GAOG;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;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAaxE;AAKD,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,CAoBR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitters.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/emitters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAGL,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,YAAY,EAMlB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AA+CzD,qBAAa,iBAAkB,YAAW,iBAAiB;IAEvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAI5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAK7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAXjC,YACmB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAIhC,YAAY,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAqB,EAKlD,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,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAY5H;IAED,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAE1F;IAED,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAMpF;IAED,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAS/E;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CA4B/F;IAED,OAAO,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAM5G;IAED,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,EAC7C,SAAS,EAAE,UAAU,EAAE,EACvB,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,CAgCR;IAED,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAQ5E;IAED,WAAW,CACT,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAAE,EAClB,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,CAMR;IAED,UAAU,CACR,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,SAAS,GAAG;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,EACvC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAC9B,MAAM,CAER;IAED,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAEtF;IAED,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAE9C;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAKpF;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG1B;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;IAED,aAAa,CAAC,WAAW,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,GAAG,MAAM,CAM1G;CACF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAhC,YAA6B,GAAG,EAAE,eAAe,EAAI;IAErD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAe/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,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
|
@@ -93,7 +93,8 @@ var MOJO_TEMPLATE_PRIMITIVES = {
|
|
|
93
93
|
"Math.round": { arity: 1, emit: (args) => `bf->round(${args[0]})` },
|
|
94
94
|
"Math.min": { arity: 2, emit: (args) => `bf->min(${args[0]}, ${args[1]})` },
|
|
95
95
|
"Math.max": { arity: 2, emit: (args) => `bf->max(${args[0]}, ${args[1]})` },
|
|
96
|
-
"Math.abs": { arity: 1, emit: (args) => `bf->abs(${args[0]})` }
|
|
96
|
+
"Math.abs": { arity: 1, emit: (args) => `bf->abs(${args[0]})` },
|
|
97
|
+
isValidElement: { arity: 1, emit: (args) => `bf->is_element(${args[0]})` }
|
|
97
98
|
};
|
|
98
99
|
var MOJO_PRIMITIVE_EMIT_MAP = Object.fromEntries(Object.entries(MOJO_TEMPLATE_PRIMITIVES).map(([k, v]) => [k, v.emit]));
|
|
99
100
|
|
|
@@ -148,7 +149,7 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
148
149
|
case "join": {
|
|
149
150
|
const obj = emit(object);
|
|
150
151
|
const sep = args.length >= 1 ? emit(args[0]) : `','`;
|
|
151
|
-
return `join(${
|
|
152
|
+
return `bf->join(${obj}, ${sep})`;
|
|
152
153
|
}
|
|
153
154
|
case "includes": {
|
|
154
155
|
const obj = emit(object);
|
|
@@ -586,7 +587,7 @@ class MojoTopLevelEmitter {
|
|
|
586
587
|
const isStr = (e) => isStringTypedOperand2(e, (n) => this.ctx._isStringValueName(n));
|
|
587
588
|
const isStringReceiver = isStr(object) || object.kind === "identifier" && this.ctx._isStringValueName(object.name);
|
|
588
589
|
if (isStringReceiver)
|
|
589
|
-
return `length(${obj})`;
|
|
590
|
+
return `bf->length(${obj})`;
|
|
590
591
|
return `scalar(@{${obj}})`;
|
|
591
592
|
}
|
|
592
593
|
return `${obj}->{${property}}`;
|
|
@@ -1709,10 +1710,11 @@ ${children}`;
|
|
|
1709
1710
|
if (e.kind === "expr" && !isSupported(parseExpression2(e.expr)).supported)
|
|
1710
1711
|
return null;
|
|
1711
1712
|
}
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1713
|
+
const args = entries.flatMap((e) => [
|
|
1714
|
+
`'${e.cssKey.replace(/[\\']/g, (m) => `\\${m}`)}'`,
|
|
1715
|
+
e.kind === "literal" ? `'${e.value.replace(/[\\']/g, (m) => `\\${m}`)}'` : this.convertExpressionToPerl(e.expr)
|
|
1716
|
+
]);
|
|
1717
|
+
return `<%== bf->style_object(${args.join(", ")}) %>`;
|
|
1716
1718
|
}
|
|
1717
1719
|
renderAttributes(element) {
|
|
1718
1720
|
const parts = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/adapter/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/adapter/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAkBlE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAG5E,CAAA"}
|
|
@@ -268,15 +268,18 @@ export declare class MojoAdapter extends BaseAdapter implements IRNodeEmitter<Mo
|
|
|
268
268
|
*/
|
|
269
269
|
private readonly elementAttrEmitter;
|
|
270
270
|
/**
|
|
271
|
-
* Lower a `style={{ … }}` object literal to a
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
271
|
+
* Lower a `style={{ … }}` object literal to a `bf->style_object(...)` call,
|
|
272
|
+
* e.g. `{ backgroundColor: color }` → `<%== bf->style_object('background-color',
|
|
273
|
+
* $color) %>`. `style_object` is the single oracle-matching sanitizer
|
|
274
|
+
* (ported from Hono's `hasUnsafeStyleValue`, shared with the Xslate
|
|
275
|
+
* adapter via `BarefootJS.pm`): it drops any key:value pair whose value
|
|
276
|
+
* could break out of a CSS declaration and HTML-escapes the rest, so the
|
|
277
|
+
* call uses `<%== %>` (raw) rather than `<%= %>` to avoid double-encoding
|
|
278
|
+
* the already-safe result (#2261). Returns null when the shape is
|
|
279
|
+
* unsupported or any value can't be lowered (caller then falls through to
|
|
275
280
|
* the BF101 refusal). (#1322)
|
|
276
281
|
*/
|
|
277
282
|
private tryLowerStyleObject;
|
|
278
|
-
/** HTML-attribute escape for static text inlined into a `"..."` attribute. */
|
|
279
|
-
private escapeAttrText;
|
|
280
283
|
private renderAttributes;
|
|
281
284
|
renderScopeMarker(_instanceIdExpr: string): string;
|
|
282
285
|
renderSlotMarker(slotId: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mojo-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/mojo-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mojo-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/mojo-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/build.js
CHANGED
|
@@ -93,7 +93,8 @@ var MOJO_TEMPLATE_PRIMITIVES = {
|
|
|
93
93
|
"Math.round": { arity: 1, emit: (args) => `bf->round(${args[0]})` },
|
|
94
94
|
"Math.min": { arity: 2, emit: (args) => `bf->min(${args[0]}, ${args[1]})` },
|
|
95
95
|
"Math.max": { arity: 2, emit: (args) => `bf->max(${args[0]}, ${args[1]})` },
|
|
96
|
-
"Math.abs": { arity: 1, emit: (args) => `bf->abs(${args[0]})` }
|
|
96
|
+
"Math.abs": { arity: 1, emit: (args) => `bf->abs(${args[0]})` },
|
|
97
|
+
isValidElement: { arity: 1, emit: (args) => `bf->is_element(${args[0]})` }
|
|
97
98
|
};
|
|
98
99
|
var MOJO_PRIMITIVE_EMIT_MAP = Object.fromEntries(Object.entries(MOJO_TEMPLATE_PRIMITIVES).map(([k, v]) => [k, v.emit]));
|
|
99
100
|
|
|
@@ -148,7 +149,7 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
148
149
|
case "join": {
|
|
149
150
|
const obj = emit(object);
|
|
150
151
|
const sep = args.length >= 1 ? emit(args[0]) : `','`;
|
|
151
|
-
return `join(${
|
|
152
|
+
return `bf->join(${obj}, ${sep})`;
|
|
152
153
|
}
|
|
153
154
|
case "includes": {
|
|
154
155
|
const obj = emit(object);
|
|
@@ -586,7 +587,7 @@ class MojoTopLevelEmitter {
|
|
|
586
587
|
const isStr = (e) => isStringTypedOperand2(e, (n) => this.ctx._isStringValueName(n));
|
|
587
588
|
const isStringReceiver = isStr(object) || object.kind === "identifier" && this.ctx._isStringValueName(object.name);
|
|
588
589
|
if (isStringReceiver)
|
|
589
|
-
return `length(${obj})`;
|
|
590
|
+
return `bf->length(${obj})`;
|
|
590
591
|
return `scalar(@{${obj}})`;
|
|
591
592
|
}
|
|
592
593
|
return `${obj}->{${property}}`;
|
|
@@ -1709,10 +1710,11 @@ ${children}`;
|
|
|
1709
1710
|
if (e.kind === "expr" && !isSupported(parseExpression2(e.expr)).supported)
|
|
1710
1711
|
return null;
|
|
1711
1712
|
}
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1713
|
+
const args = entries.flatMap((e) => [
|
|
1714
|
+
`'${e.cssKey.replace(/[\\']/g, (m) => `\\${m}`)}'`,
|
|
1715
|
+
e.kind === "literal" ? `'${e.value.replace(/[\\']/g, (m) => `\\${m}`)}'` : this.convertExpressionToPerl(e.expr)
|
|
1716
|
+
]);
|
|
1717
|
+
return `<%== bf->style_object(${args.join(", ")}) %>`;
|
|
1716
1718
|
}
|
|
1717
1719
|
renderAttributes(element) {
|
|
1718
1720
|
const parts = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance-pins.d.ts","sourceRoot":"","sources":["../src/conformance-pins.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,eAyI7B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -93,7 +93,8 @@ var MOJO_TEMPLATE_PRIMITIVES = {
|
|
|
93
93
|
"Math.round": { arity: 1, emit: (args) => `bf->round(${args[0]})` },
|
|
94
94
|
"Math.min": { arity: 2, emit: (args) => `bf->min(${args[0]}, ${args[1]})` },
|
|
95
95
|
"Math.max": { arity: 2, emit: (args) => `bf->max(${args[0]}, ${args[1]})` },
|
|
96
|
-
"Math.abs": { arity: 1, emit: (args) => `bf->abs(${args[0]})` }
|
|
96
|
+
"Math.abs": { arity: 1, emit: (args) => `bf->abs(${args[0]})` },
|
|
97
|
+
isValidElement: { arity: 1, emit: (args) => `bf->is_element(${args[0]})` }
|
|
97
98
|
};
|
|
98
99
|
var MOJO_PRIMITIVE_EMIT_MAP = Object.fromEntries(Object.entries(MOJO_TEMPLATE_PRIMITIVES).map(([k, v]) => [k, v.emit]));
|
|
99
100
|
|
|
@@ -148,7 +149,7 @@ function renderArrayMethod(method, object, args, emit) {
|
|
|
148
149
|
case "join": {
|
|
149
150
|
const obj = emit(object);
|
|
150
151
|
const sep = args.length >= 1 ? emit(args[0]) : `','`;
|
|
151
|
-
return `join(${
|
|
152
|
+
return `bf->join(${obj}, ${sep})`;
|
|
152
153
|
}
|
|
153
154
|
case "includes": {
|
|
154
155
|
const obj = emit(object);
|
|
@@ -586,7 +587,7 @@ class MojoTopLevelEmitter {
|
|
|
586
587
|
const isStr = (e) => isStringTypedOperand2(e, (n) => this.ctx._isStringValueName(n));
|
|
587
588
|
const isStringReceiver = isStr(object) || object.kind === "identifier" && this.ctx._isStringValueName(object.name);
|
|
588
589
|
if (isStringReceiver)
|
|
589
|
-
return `length(${obj})`;
|
|
590
|
+
return `bf->length(${obj})`;
|
|
590
591
|
return `scalar(@{${obj}})`;
|
|
591
592
|
}
|
|
592
593
|
return `${obj}->{${property}}`;
|
|
@@ -1709,10 +1710,11 @@ ${children}`;
|
|
|
1709
1710
|
if (e.kind === "expr" && !isSupported(parseExpression2(e.expr)).supported)
|
|
1710
1711
|
return null;
|
|
1711
1712
|
}
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1713
|
+
const args = entries.flatMap((e) => [
|
|
1714
|
+
`'${e.cssKey.replace(/[\\']/g, (m) => `\\${m}`)}'`,
|
|
1715
|
+
e.kind === "literal" ? `'${e.value.replace(/[\\']/g, (m) => `\\${m}`)}'` : this.convertExpressionToPerl(e.expr)
|
|
1716
|
+
]);
|
|
1717
|
+
return `<%== bf->style_object(${args.join(", ")}) %>`;
|
|
1716
1718
|
}
|
|
1717
1719
|
renderAttributes(element) {
|
|
1718
1720
|
const parts = [];
|
|
@@ -1910,7 +1912,8 @@ var conformancePins = {
|
|
|
1910
1912
|
"filter-nested-find-predicate": [
|
|
1911
1913
|
{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2038" }
|
|
1912
1914
|
],
|
|
1913
|
-
"dangerous-inner-html-dynamic": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2215" }]
|
|
1915
|
+
"dangerous-inner-html-dynamic": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2215" }],
|
|
1916
|
+
"date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2274" }]
|
|
1914
1917
|
};
|
|
1915
1918
|
// src/render-divergences.ts
|
|
1916
1919
|
var renderDivergences = {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barefootjs/mojolicious",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Mojolicious EP template adapter for BarefootJS - generates .html.ep files from IR",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"directory": "packages/adapter-mojolicious"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@barefootjs/shared": "0.
|
|
55
|
+
"@barefootjs/shared": "0.20.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"@barefootjs/jsx": ">=0.2.0",
|
|
@@ -60,6 +60,6 @@
|
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@barefootjs/adapter-tests": "0.1.0",
|
|
63
|
-
"@barefootjs/jsx": "0.
|
|
63
|
+
"@barefootjs/jsx": "0.20.0"
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -59,28 +59,7 @@ runAdapterConformanceTests({
|
|
|
59
59
|
// #1467 Phase 2e: same `/* @client */` keyed-map elision (data-table).
|
|
60
60
|
'data-table',
|
|
61
61
|
]),
|
|
62
|
-
skipDataPoints: new Set<string>(
|
|
63
|
-
// #2255 — Perl length() counts codepoints under utf8; JS counts
|
|
64
|
-
// UTF-16 code units, so a surrogate-pair character is 2 in JS, 1 here.
|
|
65
|
-
'string-length-text:astral',
|
|
66
|
-
// #2260 — controlled boolean props: the SSR seed evaluates only the
|
|
67
|
-
// static fallback of `props.X ?? internal()` chains.
|
|
68
|
-
'toggle:gen:pressed:true',
|
|
69
|
-
'switch:gen:checked:true',
|
|
70
|
-
'checkbox:gen:checked:true',
|
|
71
|
-
// #2261 — invalid dynamic CSS value kept (escaped) where the oracle
|
|
72
|
-
// drops the property.
|
|
73
|
-
'style-object-dynamic:gen:color:markup',
|
|
74
|
-
// #2262 — dynamic `.flat` depth 0/negative violates the documented
|
|
75
|
-
// shallow-copy contract.
|
|
76
|
-
'array-flat-dynamic-depth:gen:depth:zero',
|
|
77
|
-
'array-flat-dynamic-depth:gen:depth:negative',
|
|
78
|
-
// #2266 — asChild=true with plain-text children breaks the Slot
|
|
79
|
-
// rendering path (same class as the Go Slot define; observed on the
|
|
80
|
-
// real-Perl CI run).
|
|
81
|
-
'button:gen:asChild:true',
|
|
82
|
-
'kbd:gen:asChild:true',
|
|
83
|
-
]),
|
|
62
|
+
skipDataPoints: new Set<string>(),
|
|
84
63
|
onRenderError: (err, id) => {
|
|
85
64
|
if (err instanceof PerlNotAvailableError) {
|
|
86
65
|
console.log(`Skipping [${id}]: ${err.message}`)
|
|
@@ -926,7 +905,7 @@ export function C() {
|
|
|
926
905
|
// filter, `.join`) hit a separate refusal gate and the chain
|
|
927
906
|
// emitted BF101 — making the scaffold `<Button>` / `<Card>`
|
|
928
907
|
// unusable on Mojo. The fix lowers all three to Embedded Perl
|
|
929
|
-
// (`join(
|
|
908
|
+
// (`bf->join([grep { $_ } @{[...]}], ' ')`), unblocking the
|
|
930
909
|
// registry surface. The #1421 recursion guard stays in place
|
|
931
910
|
// as defence in depth for other unsupported shapes, but this
|
|
932
911
|
// specific chain no longer reaches the loop because the parser
|
|
@@ -949,7 +928,7 @@ export { Slot }
|
|
|
949
928
|
)
|
|
950
929
|
expect(result.errors?.filter(e => e.code === 'BF101') ?? []).toEqual([])
|
|
951
930
|
const template = result.files.find(f => f.path.endsWith('.html.ep'))?.content ?? ''
|
|
952
|
-
expect(template).toContain(`join(
|
|
931
|
+
expect(template).toContain(`bf->join([grep { $_ } @{[$className]}], ' ')`)
|
|
953
932
|
})
|
|
954
933
|
|
|
955
934
|
test('lowers .includes(x) on an array prop via bf->includes(...) (#1448 Tier A)', () => {
|
|
@@ -1179,7 +1158,7 @@ export { A }`, 'A.tsx', { adapter })
|
|
|
1179
1158
|
export { A }`, 'A.tsx', { adapter })
|
|
1180
1159
|
expect(result.errors?.filter(e => e.code === 'BF101') ?? []).toEqual([])
|
|
1181
1160
|
const template = result.files.find(f => f.path.endsWith('.html.ep'))?.content ?? ''
|
|
1182
|
-
expect(template).toContain("join(
|
|
1161
|
+
expect(template).toContain("bf->join(bf->reverse($items), ' ')")
|
|
1183
1162
|
expect(template).not.toContain('$bf->reverse')
|
|
1184
1163
|
})
|
|
1185
1164
|
|
|
@@ -1191,7 +1170,7 @@ export { A }`, 'A.tsx', { adapter })
|
|
|
1191
1170
|
export { A }`, 'A.tsx', { adapter })
|
|
1192
1171
|
expect(result.errors?.filter(e => e.code === 'BF101') ?? []).toEqual([])
|
|
1193
1172
|
const template = result.files.find(f => f.path.endsWith('.html.ep'))?.content ?? ''
|
|
1194
|
-
expect(template).toContain("join(
|
|
1173
|
+
expect(template).toContain("bf->join(bf->reverse($items), ' ')")
|
|
1195
1174
|
})
|
|
1196
1175
|
|
|
1197
1176
|
test('lowers .slice(start, end).join(\' \') via bf->slice + join (#1448 Tier A)', () => {
|
|
@@ -1203,7 +1182,7 @@ export { A }`, 'A.tsx', { adapter })
|
|
|
1203
1182
|
export { A }`, 'A.tsx', { adapter })
|
|
1204
1183
|
expect(result.errors?.filter(e => e.code === 'BF101') ?? []).toEqual([])
|
|
1205
1184
|
const template = result.files.find(f => f.path.endsWith('.html.ep'))?.content ?? ''
|
|
1206
|
-
expect(template).toContain("join(
|
|
1185
|
+
expect(template).toContain("bf->join(bf->slice($items, 1, 3), ' ')")
|
|
1207
1186
|
expect(template).not.toContain('$bf->slice')
|
|
1208
1187
|
})
|
|
1209
1188
|
|
|
@@ -1217,7 +1196,7 @@ export { A }`, 'A.tsx', { adapter })
|
|
|
1217
1196
|
export { A }`, 'A.tsx', { adapter })
|
|
1218
1197
|
expect(result.errors?.filter(e => e.code === 'BF101') ?? []).toEqual([])
|
|
1219
1198
|
const template = result.files.find(f => f.path.endsWith('.html.ep'))?.content ?? ''
|
|
1220
|
-
expect(template).toContain("join(
|
|
1199
|
+
expect(template).toContain("bf->join(bf->slice($items, 2, undef), ' ')")
|
|
1221
1200
|
})
|
|
1222
1201
|
|
|
1223
1202
|
test('lowers .concat(other).join(\' \') via bf->concat + join (#1448 Tier A)', () => {
|
|
@@ -1233,7 +1212,7 @@ export { A }`, 'A.tsx', { adapter })
|
|
|
1233
1212
|
export { A }`, 'A.tsx', { adapter })
|
|
1234
1213
|
expect(result.errors?.filter(e => e.code === 'BF101') ?? []).toEqual([])
|
|
1235
1214
|
const template = result.files.find(f => f.path.endsWith('.html.ep'))?.content ?? ''
|
|
1236
|
-
expect(template).toContain("join(
|
|
1215
|
+
expect(template).toContain("bf->join(bf->concat($left, $right), ' ')")
|
|
1237
1216
|
expect(template).not.toContain('$bf->concat')
|
|
1238
1217
|
})
|
|
1239
1218
|
|
|
@@ -1345,7 +1324,7 @@ export function Foo(props: { v: string }) {
|
|
|
1345
1324
|
// list rather than replace.
|
|
1346
1325
|
const a = new MojoAdapter()
|
|
1347
1326
|
const keys = Object.keys(a.templatePrimitives ?? {}).sort()
|
|
1348
|
-
expect(keys).toEqual(['JSON.stringify', 'Math.abs', 'Math.ceil', 'Math.floor', 'Math.max', 'Math.min', 'Math.round', 'Number', 'String'])
|
|
1327
|
+
expect(keys).toEqual(['JSON.stringify', 'Math.abs', 'Math.ceil', 'Math.floor', 'Math.max', 'Math.min', 'Math.round', 'Number', 'String', 'isValidElement'])
|
|
1349
1328
|
})
|
|
1350
1329
|
|
|
1351
1330
|
test('unregistered identifier-path callee is NOT accepted', () => {
|
|
@@ -1495,10 +1474,10 @@ describe('MojoAdapter - #1448 Tier A/B fixture-driven lowering pins', () => {
|
|
|
1495
1474
|
{ fixture: arraySliceFixture, expect: 'bf->slice($items, 1, 3)' },
|
|
1496
1475
|
// #1448 full-arity — zero-arg defaults.
|
|
1497
1476
|
{ fixture: arraySliceCopyFixture, expect: 'bf->slice($items, 0, undef)' },
|
|
1498
|
-
{ fixture: arrayJoinDefaultFixture, expect: `join(','
|
|
1477
|
+
{ fixture: arrayJoinDefaultFixture, expect: `bf->join($items, ',')` },
|
|
1499
1478
|
// `.at()` → index 0; `.concat()` → the receiver (shallow copy).
|
|
1500
1479
|
{ fixture: arrayAtDefaultFixture, expect: 'bf->at($items, 0)' },
|
|
1501
|
-
{ fixture: arrayConcatCopyFixture, expect: `join('|'
|
|
1480
|
+
{ fixture: arrayConcatCopyFixture, expect: `bf->join($items, '|')` },
|
|
1502
1481
|
{ fixture: arrayReverseFixture, expect: 'bf->reverse($items)' },
|
|
1503
1482
|
// .toReversed shares the helper with .reverse — pinning both
|
|
1504
1483
|
// routings catches a future divergence between them.
|
|
@@ -1508,7 +1487,7 @@ describe('MojoAdapter - #1448 Tier A/B fixture-driven lowering pins', () => {
|
|
|
1508
1487
|
{ fixture: stringTrimFixture, expect: 'bf->trim($value)' },
|
|
1509
1488
|
// #1448 Tier B — string → array. `.split(',')` lowers to
|
|
1510
1489
|
// `bf->split`, here chained into `.join('|')` so the array ref is
|
|
1511
|
-
// observable (`join(
|
|
1490
|
+
// observable (`bf->join(bf->split($value, ','), '|')`).
|
|
1512
1491
|
{ fixture: stringSplitFixture, expect: `bf->split($value, ',')` },
|
|
1513
1492
|
{ fixture: stringSplitLimitFixture, expect: `bf->split($value, ',', 2)` },
|
|
1514
1493
|
// #1448 Tier B — string → boolean at condition position (`% if`).
|
|
@@ -1698,7 +1677,7 @@ export { C }
|
|
|
1698
1677
|
// projects each element (no flatten) and composes through `.join`.
|
|
1699
1678
|
test('.map(t => `#${t}`).join(" ") emits bf->map_eval composed into join', () => {
|
|
1700
1679
|
const t = emitMap("tags.map(t => `#${t}`).join(' ')")
|
|
1701
|
-
expect(t).toContain(`join(
|
|
1680
|
+
expect(t).toContain(`bf->join(bf->map_eval($tags,`)
|
|
1702
1681
|
expect(t).toContain(`"kind":"template-literal"`)
|
|
1703
1682
|
})
|
|
1704
1683
|
|
|
@@ -35,14 +35,20 @@ export function renderArrayMethod(
|
|
|
35
35
|
): string {
|
|
36
36
|
switch (method) {
|
|
37
37
|
case 'join': {
|
|
38
|
-
// arr.join(sep) → join(
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
38
|
+
// arr.join(sep) → bf->join(arr, sep), NOT Perl's native `join`
|
|
39
|
+
// builtin directly on `@{arr}` — a nested-array element (e.g.
|
|
40
|
+
// `.flat(0)`'s shallow copy) would stringify to its Perl memory
|
|
41
|
+
// address ("ARRAY(0x...)") under native `join`'s scalar coercion
|
|
42
|
+
// instead of JS's recursive comma-join (#2262/#2272). `bf->join`
|
|
43
|
+
// (BarefootJS.pm) routes each element through `string()` first.
|
|
44
|
+
// The default `${obj}->{join}` hash-lookup fallback would emit
|
|
45
|
+
// invalid Perl, which is why the IR carves out a dedicated method
|
|
46
|
+
// node instead of routing through the generic call dispatcher.
|
|
47
|
+
// `.join()` defaults the separator to `,` (JS) and ignores any
|
|
48
|
+
// extra argument.
|
|
43
49
|
const obj = emit(object)
|
|
44
50
|
const sep = args.length >= 1 ? emit(args[0]) : `','`
|
|
45
|
-
return `join(${
|
|
51
|
+
return `bf->join(${obj}, ${sep})`
|
|
46
52
|
}
|
|
47
53
|
case 'includes': {
|
|
48
54
|
// Both `arr.includes(x)` and `str.includes(sub)` route here —
|
|
@@ -351,7 +351,12 @@ export class MojoTopLevelEmitter implements ParsedExprEmitter {
|
|
|
351
351
|
const isStringReceiver =
|
|
352
352
|
isStr(object) ||
|
|
353
353
|
(object.kind === 'identifier' && this.ctx._isStringValueName(object.name))
|
|
354
|
-
|
|
354
|
+
// A string receiver routes through the shared `bf->length` (NOT
|
|
355
|
+
// Perl's builtin `length()`) because JS `.length` counts UTF-16
|
|
356
|
+
// CODE UNITS, not Perl's codepoint-counting `length()` (#2255) — an
|
|
357
|
+
// astral codepoint (a surrogate pair in UTF-16, e.g. '👍') counts as
|
|
358
|
+
// 2, not 1.
|
|
359
|
+
if (isStringReceiver) return `bf->length(${obj})`
|
|
355
360
|
return `scalar(@{${obj}})`
|
|
356
361
|
}
|
|
357
362
|
return `${obj}->{${property}}`
|
|
@@ -29,6 +29,14 @@ export const MOJO_TEMPLATE_PRIMITIVES: Record<string, PrimitiveSpec> = {
|
|
|
29
29
|
'Math.min': { arity: 2, emit: (args) => `bf->min(${args[0]}, ${args[1]})` },
|
|
30
30
|
'Math.max': { arity: 2, emit: (args) => `bf->max(${args[0]}, ${args[1]})` },
|
|
31
31
|
'Math.abs': { arity: 1, emit: (args) => `bf->abs(${args[0]})` },
|
|
32
|
+
// `isValidElement(x)` — the framework "is this a renderable element (not
|
|
33
|
+
// plain text)?" predicate `Slot`'s `asChild` pattern uses (#2266). A
|
|
34
|
+
// passed-through JSX child is represented as pre-rendered markup on
|
|
35
|
+
// Mojolicious's SSR model too, so a plain STRING child must NOT read as
|
|
36
|
+
// "valid" (mirrors JS's `'tag' in x && 'props' in x`) — previously this
|
|
37
|
+
// callee had no primitive entry at all and fell through to an undeclared
|
|
38
|
+
// `$isValidElement` stash lookup, dying under `use strict`/`vars => 1`.
|
|
39
|
+
'isValidElement': { arity: 1, emit: (args) => `bf->is_element(${args[0]})` },
|
|
32
40
|
}
|
|
33
41
|
|
|
34
42
|
/**
|
|
@@ -1508,10 +1508,15 @@ export class MojoAdapter extends BaseAdapter implements IRNodeEmitter<MojoRender
|
|
|
1508
1508
|
}
|
|
1509
1509
|
|
|
1510
1510
|
/**
|
|
1511
|
-
* Lower a `style={{ … }}` object literal to a
|
|
1512
|
-
*
|
|
1513
|
-
*
|
|
1514
|
-
*
|
|
1511
|
+
* Lower a `style={{ … }}` object literal to a `bf->style_object(...)` call,
|
|
1512
|
+
* e.g. `{ backgroundColor: color }` → `<%== bf->style_object('background-color',
|
|
1513
|
+
* $color) %>`. `style_object` is the single oracle-matching sanitizer
|
|
1514
|
+
* (ported from Hono's `hasUnsafeStyleValue`, shared with the Xslate
|
|
1515
|
+
* adapter via `BarefootJS.pm`): it drops any key:value pair whose value
|
|
1516
|
+
* could break out of a CSS declaration and HTML-escapes the rest, so the
|
|
1517
|
+
* call uses `<%== %>` (raw) rather than `<%= %>` to avoid double-encoding
|
|
1518
|
+
* the already-safe result (#2261). Returns null when the shape is
|
|
1519
|
+
* unsupported or any value can't be lowered (caller then falls through to
|
|
1515
1520
|
* the BF101 refusal). (#1322)
|
|
1516
1521
|
*/
|
|
1517
1522
|
private tryLowerStyleObject(expr: string): string | null {
|
|
@@ -1520,27 +1525,11 @@ export class MojoAdapter extends BaseAdapter implements IRNodeEmitter<MojoRender
|
|
|
1520
1525
|
for (const e of entries) {
|
|
1521
1526
|
if (e.kind === 'expr' && !isSupported(parseExpression(e.expr)).supported) return null
|
|
1522
1527
|
}
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
return
|
|
1528
|
-
.map(e =>
|
|
1529
|
-
e.kind === 'literal'
|
|
1530
|
-
? `${this.escapeAttrText(e.cssKey)}:${this.escapeAttrText(e.value)}`
|
|
1531
|
-
: `${this.escapeAttrText(e.cssKey)}:<%= ${this.convertExpressionToPerl(e.expr)} %>`,
|
|
1532
|
-
)
|
|
1533
|
-
.join(';')
|
|
1534
|
-
}
|
|
1535
|
-
|
|
1536
|
-
/** HTML-attribute escape for static text inlined into a `"..."` attribute. */
|
|
1537
|
-
private escapeAttrText(s: string): string {
|
|
1538
|
-
return s
|
|
1539
|
-
.replace(/&/g, '&')
|
|
1540
|
-
.replace(/"/g, '"')
|
|
1541
|
-
.replace(/'/g, ''')
|
|
1542
|
-
.replace(/</g, '<')
|
|
1543
|
-
.replace(/>/g, '>')
|
|
1528
|
+
const args = entries.flatMap(e => [
|
|
1529
|
+
`'${e.cssKey.replace(/[\\']/g, m => `\\${m}`)}'`,
|
|
1530
|
+
e.kind === 'literal' ? `'${e.value.replace(/[\\']/g, m => `\\${m}`)}'` : this.convertExpressionToPerl(e.expr),
|
|
1531
|
+
])
|
|
1532
|
+
return `<%== bf->style_object(${args.join(', ')}) %>`
|
|
1544
1533
|
}
|
|
1545
1534
|
|
|
1546
1535
|
private renderAttributes(element: IRElement): string {
|
package/src/conformance-pins.ts
CHANGED
|
@@ -88,7 +88,7 @@ export const conformancePins: ConformancePins = {
|
|
|
88
88
|
// below for the shared `/* @client */` keyed-map slot-id elision
|
|
89
89
|
// contract (same as `todo-app`), not a render or BF101 gap.
|
|
90
90
|
// #1443: `[a, b].filter(Boolean).join(' ')` (the registry Slot's
|
|
91
|
-
// shape) now lowers to `join(
|
|
91
|
+
// shape) now lowers to `bf->join([grep { $_ } @{[$a, $b]}], ' ')`.
|
|
92
92
|
// No BF101 expected — pinned positively via the
|
|
93
93
|
// `branch-local-filter-join` template-output test below.
|
|
94
94
|
//
|
|
@@ -139,4 +139,10 @@ export const conformancePins: ConformancePins = {
|
|
|
139
139
|
// A dynamic/signal-derived value still refuses with BF101 — see the
|
|
140
140
|
// `dangerous-inner-html-dynamic` fixture/pin below (tracked: #2215).
|
|
141
141
|
'dangerous-inner-html-dynamic': [{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2215' }],
|
|
142
|
+
// #2273: a method call on a prop typed as a built-in host rich type
|
|
143
|
+
// (Date, Map, …) has no catalogued lowering in any adapter — this is a
|
|
144
|
+
// compiler-level refusal (`checkRichTypeMethodCalls`, wired ahead of
|
|
145
|
+
// `adapter.generate()`), not an adapter-specific gap, so it is pinned
|
|
146
|
+
// identically across every adapter package including Hono.
|
|
147
|
+
'date-method-uncatalogued': [{ code: 'BF021', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2274' }],
|
|
142
148
|
}
|