@barefootjs/erb 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/erb-adapter.d.ts.map +1 -1
- package/dist/adapter/expr/emitters.d.ts.map +1 -1
- package/dist/adapter/index.js +4 -3
- package/dist/build.js +4 -3
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/lib/barefoot_js.rb +85 -3
- package/package.json +3 -3
- package/src/__tests__/erb-adapter.test.ts +1 -17
- package/src/adapter/erb-adapter.ts +15 -9
- package/src/adapter/expr/emitters.ts +9 -2
- package/src/conformance-pins.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erb-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/erb-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"erb-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/erb-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitters.d.ts","sourceRoot":"","sources":["../../../src/adapter/expr/emitters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,YAAY,EAKlB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAwCxD,qBAAa,gBAAiB,YAAW,iBAAiB;IAEtD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAM5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAIjC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAK7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAa/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IA9BhC,YACmB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAMhC,gBAAgB,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAqB,EAItD,YAAY,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAA4B,EAKzD,aAAa,CAAC,GAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,aAAA,EAa1D,aAAa,GAAE,MAAyB,EACvD;IAEJ,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/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,QAAQ,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
|
@@ -187806,7 +187806,7 @@ class ErbFilterEmitter {
|
|
|
187806
187806
|
}
|
|
187807
187807
|
member(object, property, _computed, optional, emit) {
|
|
187808
187808
|
if (property === "length")
|
|
187809
|
-
return
|
|
187809
|
+
return `bf.length(${emit(object)})`;
|
|
187810
187810
|
if (optional)
|
|
187811
187811
|
return `${emit(object)}&.[](${rubySymbolLiteral(property)})`;
|
|
187812
187812
|
return `${emit(object)}[${rubySymbolLiteral(property)}]`;
|
|
@@ -187941,7 +187941,7 @@ class ErbTopLevelEmitter {
|
|
|
187941
187941
|
}
|
|
187942
187942
|
const obj = emit(object);
|
|
187943
187943
|
if (property === "length")
|
|
187944
|
-
return
|
|
187944
|
+
return `bf.length(${obj})`;
|
|
187945
187945
|
if (optional)
|
|
187946
187946
|
return `${obj}&.[](${rubySymbolLiteral(property)})`;
|
|
187947
187947
|
return `${obj}[${rubySymbolLiteral(property)}]`;
|
|
@@ -189062,7 +189062,8 @@ ${children}`;
|
|
|
189062
189062
|
if (e.kind === "expr" && !isSupported(parseExpression2(e.expr)).supported)
|
|
189063
189063
|
return null;
|
|
189064
189064
|
}
|
|
189065
|
-
|
|
189065
|
+
const args = entries.map((e) => e.kind === "literal" ? `${JSON.stringify(e.cssKey)}, ${rubyStringLiteral(e.value)}` : `${JSON.stringify(e.cssKey)}, (${this.convertExpressionToRuby(e.expr)})`).join(", ");
|
|
189066
|
+
return `<%= bf.h(bf.style_object(${args})) %>`;
|
|
189066
189067
|
}
|
|
189067
189068
|
escapeAttrText(s) {
|
|
189068
189069
|
return s.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">");
|
package/dist/build.js
CHANGED
|
@@ -187806,7 +187806,7 @@ class ErbFilterEmitter {
|
|
|
187806
187806
|
}
|
|
187807
187807
|
member(object, property, _computed, optional, emit) {
|
|
187808
187808
|
if (property === "length")
|
|
187809
|
-
return
|
|
187809
|
+
return `bf.length(${emit(object)})`;
|
|
187810
187810
|
if (optional)
|
|
187811
187811
|
return `${emit(object)}&.[](${rubySymbolLiteral(property)})`;
|
|
187812
187812
|
return `${emit(object)}[${rubySymbolLiteral(property)}]`;
|
|
@@ -187941,7 +187941,7 @@ class ErbTopLevelEmitter {
|
|
|
187941
187941
|
}
|
|
187942
187942
|
const obj = emit(object);
|
|
187943
187943
|
if (property === "length")
|
|
187944
|
-
return
|
|
187944
|
+
return `bf.length(${obj})`;
|
|
187945
187945
|
if (optional)
|
|
187946
187946
|
return `${obj}&.[](${rubySymbolLiteral(property)})`;
|
|
187947
187947
|
return `${obj}[${rubySymbolLiteral(property)}]`;
|
|
@@ -189062,7 +189062,8 @@ ${children}`;
|
|
|
189062
189062
|
if (e.kind === "expr" && !isSupported(parseExpression2(e.expr)).supported)
|
|
189063
189063
|
return null;
|
|
189064
189064
|
}
|
|
189065
|
-
|
|
189065
|
+
const args = entries.map((e) => e.kind === "literal" ? `${JSON.stringify(e.cssKey)}, ${rubyStringLiteral(e.value)}` : `${JSON.stringify(e.cssKey)}, (${this.convertExpressionToRuby(e.expr)})`).join(", ");
|
|
189066
|
+
return `<%= bf.h(bf.style_object(${args})) %>`;
|
|
189066
189067
|
}
|
|
189067
189068
|
escapeAttrText(s) {
|
|
189068
189069
|
return s.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance-pins.d.ts","sourceRoot":"","sources":["../src/conformance-pins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,eAkG7B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -187806,7 +187806,7 @@ class ErbFilterEmitter {
|
|
|
187806
187806
|
}
|
|
187807
187807
|
member(object, property, _computed, optional, emit) {
|
|
187808
187808
|
if (property === "length")
|
|
187809
|
-
return
|
|
187809
|
+
return `bf.length(${emit(object)})`;
|
|
187810
187810
|
if (optional)
|
|
187811
187811
|
return `${emit(object)}&.[](${rubySymbolLiteral(property)})`;
|
|
187812
187812
|
return `${emit(object)}[${rubySymbolLiteral(property)}]`;
|
|
@@ -187941,7 +187941,7 @@ class ErbTopLevelEmitter {
|
|
|
187941
187941
|
}
|
|
187942
187942
|
const obj = emit(object);
|
|
187943
187943
|
if (property === "length")
|
|
187944
|
-
return
|
|
187944
|
+
return `bf.length(${obj})`;
|
|
187945
187945
|
if (optional)
|
|
187946
187946
|
return `${obj}&.[](${rubySymbolLiteral(property)})`;
|
|
187947
187947
|
return `${obj}[${rubySymbolLiteral(property)}]`;
|
|
@@ -189062,7 +189062,8 @@ ${children}`;
|
|
|
189062
189062
|
if (e.kind === "expr" && !isSupported(parseExpression2(e.expr)).supported)
|
|
189063
189063
|
return null;
|
|
189064
189064
|
}
|
|
189065
|
-
|
|
189065
|
+
const args = entries.map((e) => e.kind === "literal" ? `${JSON.stringify(e.cssKey)}, ${rubyStringLiteral(e.value)}` : `${JSON.stringify(e.cssKey)}, (${this.convertExpressionToRuby(e.expr)})`).join(", ");
|
|
189066
|
+
return `<%= bf.h(bf.style_object(${args})) %>`;
|
|
189066
189067
|
}
|
|
189067
189068
|
escapeAttrText(s) {
|
|
189068
189069
|
return s.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">");
|
|
@@ -189268,7 +189269,8 @@ var conformancePins = {
|
|
|
189268
189269
|
"filter-nested-find-predicate": [
|
|
189269
189270
|
{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2038" }
|
|
189270
189271
|
],
|
|
189271
|
-
"dangerous-inner-html-dynamic": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2215" }]
|
|
189272
|
+
"dangerous-inner-html-dynamic": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2215" }],
|
|
189273
|
+
"date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2274" }]
|
|
189272
189274
|
};
|
|
189273
189275
|
// src/render-divergences.ts
|
|
189274
189276
|
var renderDivergences = {};
|
package/lib/barefoot_js.rb
CHANGED
|
@@ -396,6 +396,12 @@ module BarefootJS
|
|
|
396
396
|
return '' if value.nil?
|
|
397
397
|
return value ? 'true' : 'false' if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
|
398
398
|
return Evaluator.number_to_string(value) if value.is_a?(Numeric)
|
|
399
|
+
# JS `Array.prototype.toString` is `this.join(',')`, applied
|
|
400
|
+
# recursively -- Ruby's `Array#to_s` (inspect-style, e.g. "[[1], [2]]")
|
|
401
|
+
# would otherwise leak through here instead of the JS comma-join
|
|
402
|
+
# (e.g. reached via `.flat(0)`'s shallow copy joined afterwards,
|
|
403
|
+
# #2262).
|
|
404
|
+
return value.map { |el| string(el) }.join(',') if value.is_a?(Array)
|
|
399
405
|
|
|
400
406
|
value.to_s
|
|
401
407
|
end
|
|
@@ -564,13 +570,89 @@ module BarefootJS
|
|
|
564
570
|
recv.map { |el| string(el) }.join(sep)
|
|
565
571
|
end
|
|
566
572
|
|
|
567
|
-
# `.length` works on both arrays (element count) and strings
|
|
568
|
-
#
|
|
573
|
+
# `.length` works on both arrays (element count) and strings. The
|
|
574
|
+
# string branch counts UTF-16 CODE UNITS, matching JS
|
|
575
|
+
# `String.prototype.length` (#2255) -- NOT Ruby's native `String#length`
|
|
576
|
+
# (Unicode codepoints). A codepoint outside the Basic Multilingual
|
|
577
|
+
# Plane (astral, U+10000-U+10FFFF -- e.g. '👍') is a surrogate PAIR in
|
|
578
|
+
# UTF-16, so it counts as 2, not 1; '日本語' is 3 either way (BMP-only).
|
|
569
579
|
def length(recv)
|
|
570
580
|
return recv.length if recv.is_a?(Array)
|
|
571
581
|
return 0 if recv.is_a?(Hash) || recv.nil?
|
|
572
582
|
|
|
573
|
-
string(recv).
|
|
583
|
+
string(recv).each_char.sum { |c| c.ord > 0xFFFF ? 2 : 1 }
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
# Mirrors Hono's own CSS-injection guard (`hono/jsx/utils.ts`'s
|
|
587
|
+
# `hasUnsafeStyleValue` -- the ORACLE a dynamic `style={{...}}` value
|
|
588
|
+
# must match, #2261): a hand-rolled structural scan for characters that
|
|
589
|
+
# could break out of a CSS declaration, NOT real CSSOM property
|
|
590
|
+
# validation. Ported byte-for-byte -- every character this scan tests
|
|
591
|
+
# is ASCII, so scanning by byte agrees with Hono's UTF-16-code-unit
|
|
592
|
+
# scan for every input; a multibyte UTF-8 sequence has no byte in the
|
|
593
|
+
# ASCII range, so it can never spuriously match one of these
|
|
594
|
+
# single-byte comparisons. Skips the reference implementation's regex
|
|
595
|
+
# fast-path (a pure optimization -- the scan below already returns
|
|
596
|
+
# `false` promptly for a clean value).
|
|
597
|
+
def has_unsafe_style_value?(value)
|
|
598
|
+
bytes = value.b
|
|
599
|
+
quote = 0
|
|
600
|
+
block_stack = []
|
|
601
|
+
i = 0
|
|
602
|
+
len = bytes.bytesize
|
|
603
|
+
while i < len
|
|
604
|
+
c = bytes.getbyte(i)
|
|
605
|
+
if c == 92 # \
|
|
606
|
+
return true if i == len - 1
|
|
607
|
+
i += 1
|
|
608
|
+
elsif quote != 0
|
|
609
|
+
return true if c == 10 || c == 12 || c == 13
|
|
610
|
+
quote = 0 if c == quote
|
|
611
|
+
elsif c == 47 && i + 1 < len && bytes.getbyte(i + 1) == 42 # "/*"
|
|
612
|
+
endi = bytes.index('*/', i + 2)
|
|
613
|
+
return true if endi.nil?
|
|
614
|
+
i = endi + 1
|
|
615
|
+
elsif c == 34 || c == 39 # " or '
|
|
616
|
+
quote = c
|
|
617
|
+
elsif c == 40 # (
|
|
618
|
+
block_stack.push(41)
|
|
619
|
+
elsif c == 91 # [
|
|
620
|
+
block_stack.push(93)
|
|
621
|
+
elsif c == 123 || c == 125 # { or }
|
|
622
|
+
return true
|
|
623
|
+
elsif c == 41 || c == 93 # ) or ]
|
|
624
|
+
return true if block_stack.empty? || block_stack.last != c
|
|
625
|
+
block_stack.pop
|
|
626
|
+
elsif c == 59 && block_stack.empty? # ;
|
|
627
|
+
return true
|
|
628
|
+
end
|
|
629
|
+
i += 1
|
|
630
|
+
end
|
|
631
|
+
quote != 0 || !block_stack.empty?
|
|
632
|
+
end
|
|
633
|
+
|
|
634
|
+
# Builds the CSS string for a `style={{...}}` JSX object-literal
|
|
635
|
+
# attribute (#2261) -- `pairs` alternates CSS key (always a
|
|
636
|
+
# compile-time-known literal), then value. A value that fails
|
|
637
|
+
# `has_unsafe_style_value?` (after JS-`String()`-style stringification)
|
|
638
|
+
# is DROPPED -- the whole `key:value` pair is omitted -- matching
|
|
639
|
+
# Hono's oracle behavior exactly. The final joined string is STILL
|
|
640
|
+
# HTML-escaped (mirroring Hono's own `escapeToBuffer` call on its
|
|
641
|
+
# accumulated style string) -- a "safe" value can still carry a
|
|
642
|
+
# literal `"`/`'`/`&` (e.g. a BALANCED-quote CSS string value like
|
|
643
|
+
# `"hello"` passes the structural scan) that would otherwise break out
|
|
644
|
+
# of the double-quoted `style="..."` attribute. Returns a `SafeString`
|
|
645
|
+
# so `bf.h` (which the emitter still wraps every dynamic value with)
|
|
646
|
+
# passes the already-escaped result through unchanged.
|
|
647
|
+
def style_object(*pairs)
|
|
648
|
+
parts = []
|
|
649
|
+
pairs.each_slice(2) do |key, value|
|
|
650
|
+
v = string(value)
|
|
651
|
+
next if has_unsafe_style_value?(v)
|
|
652
|
+
|
|
653
|
+
parts << "#{html_escape(key)}:#{html_escape(v)}"
|
|
654
|
+
end
|
|
655
|
+
SafeString.new(parts.join(';'))
|
|
574
656
|
end
|
|
575
657
|
|
|
576
658
|
# `Array.prototype.indexOf(x)` / `.lastIndexOf(x)` -- value-equality
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barefootjs/erb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "ERB (Embedded Ruby) adapter for BarefootJS — compiles IR to .erb templates and ships the Ruby rendering backend; runs under any Rack app (Sinatra, Rails)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -54,14 +54,14 @@
|
|
|
54
54
|
"directory": "packages/adapter-erb"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@barefootjs/shared": "0.
|
|
57
|
+
"@barefootjs/shared": "0.20.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"@barefootjs/jsx": ">=0.2.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@barefootjs/adapter-tests": "0.1.0",
|
|
64
|
-
"@barefootjs/jsx": "0.
|
|
64
|
+
"@barefootjs/jsx": "0.20.0",
|
|
65
65
|
"typescript": "^5.0.0"
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -70,23 +70,7 @@ runAdapterConformanceTests({
|
|
|
70
70
|
// #1467 Phase 2e: same `/* @client */` keyed-map elision (data-table).
|
|
71
71
|
'data-table',
|
|
72
72
|
]),
|
|
73
|
-
skipDataPoints: new Set<string>(
|
|
74
|
-
// #2255 — Ruby String#length counts codepoints; JS counts UTF-16
|
|
75
|
-
// code units, so a surrogate-pair character is 2 in JS, 1 here.
|
|
76
|
-
'string-length-text:astral',
|
|
77
|
-
// #2260 — controlled boolean props: the SSR seed evaluates only the
|
|
78
|
-
// static fallback of `props.X ?? internal()` chains.
|
|
79
|
-
'toggle:gen:pressed:true',
|
|
80
|
-
'switch:gen:checked:true',
|
|
81
|
-
'checkbox:gen:checked:true',
|
|
82
|
-
// #2261 — invalid dynamic CSS value kept (escaped) where the oracle
|
|
83
|
-
// drops the property.
|
|
84
|
-
'style-object-dynamic:gen:color:markup',
|
|
85
|
-
// #2262 — dynamic `.flat` depth 0/negative: the unflattened nested
|
|
86
|
-
// result stringifies Ruby-style instead of the JS join.
|
|
87
|
-
'array-flat-dynamic-depth:gen:depth:zero',
|
|
88
|
-
'array-flat-dynamic-depth:gen:depth:negative',
|
|
89
|
-
]),
|
|
73
|
+
skipDataPoints: new Set<string>(),
|
|
90
74
|
onRenderError: (err, id) => {
|
|
91
75
|
if (err instanceof ErbNotAvailableError) {
|
|
92
76
|
console.log(`Skipping [${id}]: ${err.message}`)
|
|
@@ -1541,18 +1541,24 @@ export class ErbAdapter extends BaseAdapter implements IRNodeEmitter<ErbRenderCt
|
|
|
1541
1541
|
for (const e of entries) {
|
|
1542
1542
|
if (e.kind === 'expr' && !isSupported(parseExpression(e.expr)).supported) return null
|
|
1543
1543
|
}
|
|
1544
|
-
//
|
|
1545
|
-
//
|
|
1546
|
-
//
|
|
1547
|
-
//
|
|
1548
|
-
//
|
|
1549
|
-
|
|
1544
|
+
// Routed through the single `bf.style_object` runtime call (#2261)
|
|
1545
|
+
// rather than per-pair `key:value` template interpolation — a dynamic
|
|
1546
|
+
// value that fails the ported `has_unsafe_style_value?` CSS-injection
|
|
1547
|
+
// scan must DROP its entire pair to match Hono's oracle behavior,
|
|
1548
|
+
// which isn't expressible as a per-pair inline substitution (a dropped
|
|
1549
|
+
// MIDDLE pair would otherwise leave a dangling `key:` / stray `;;` in
|
|
1550
|
+
// a `.map().join(';')` splice). `style_object` returns a `SafeString`
|
|
1551
|
+
// (already HTML-escaped internally), so `bf.h(...)` here is a no-op
|
|
1552
|
+
// pass-through for it, consistent with every other dynamic-value call
|
|
1553
|
+
// site in this file.
|
|
1554
|
+
const args = entries
|
|
1550
1555
|
.map(e =>
|
|
1551
1556
|
e.kind === 'literal'
|
|
1552
|
-
? `${
|
|
1553
|
-
: `${
|
|
1557
|
+
? `${JSON.stringify(e.cssKey)}, ${rubyStringLiteral(e.value)}`
|
|
1558
|
+
: `${JSON.stringify(e.cssKey)}, (${this.convertExpressionToRuby(e.expr)})`,
|
|
1554
1559
|
)
|
|
1555
|
-
.join('
|
|
1560
|
+
.join(', ')
|
|
1561
|
+
return `<%= bf.h(bf.style_object(${args})) %>`
|
|
1556
1562
|
}
|
|
1557
1563
|
|
|
1558
1564
|
/** HTML-attribute escape for static text inlined into a `"..."` attribute. */
|
|
@@ -140,7 +140,11 @@ export class ErbFilterEmitter implements ParsedExprEmitter {
|
|
|
140
140
|
// `.length` needs no special higher-order form here — see the file
|
|
141
141
|
// docstring's simplification (2): `.select { ... }.length` just works
|
|
142
142
|
// in Ruby, unlike Perl's anonymous-arrayref `scalar(@{...})` detour.
|
|
143
|
-
|
|
143
|
+
// Routed through `bf.length` (not the native `.length` method) because
|
|
144
|
+
// Ruby's `String#length` counts Unicode codepoints, not JS's UTF-16
|
|
145
|
+
// code units (#2255) — array `.length` is unaffected either way, so
|
|
146
|
+
// this stays one call site for both receiver shapes.
|
|
147
|
+
if (property === 'length') return `bf.length(${emit(object)})`
|
|
144
148
|
// A `?.`-written access (`user?.name`, #2168 optional-chaining-prop):
|
|
145
149
|
// Ruby's own `nil[:key]` raises `NoMethodError` (unlike Hash#[] on a
|
|
146
150
|
// present Hash) — `&.` is Ruby's native safe-navigation operator, and
|
|
@@ -359,7 +363,10 @@ export class ErbTopLevelEmitter implements ParsedExprEmitter {
|
|
|
359
363
|
if (staticValue !== null) return staticValue
|
|
360
364
|
}
|
|
361
365
|
const obj = emit(object)
|
|
362
|
-
|
|
366
|
+
// Routed through `bf.length`, not native `.length` — see
|
|
367
|
+
// `ErbFilterEmitter.member()`'s comment above (#2255, UTF-16 code
|
|
368
|
+
// units vs. Ruby's codepoint-counting `String#length`).
|
|
369
|
+
if (property === 'length') return `bf.length(${obj})`
|
|
363
370
|
// A `?.`-written access (`user?.name`, #2168 optional-chaining-prop):
|
|
364
371
|
// see `ErbFilterEmitter.member()`'s comment above for why `&.[](...)`
|
|
365
372
|
// (not a dotted `&.name`) is the right safe-nav form for a Hash-keyed
|
package/src/conformance-pins.ts
CHANGED
|
@@ -103,4 +103,10 @@ export const conformancePins: ConformancePins = {
|
|
|
103
103
|
// A dynamic/signal-derived value still refuses with BF101 — see the
|
|
104
104
|
// `dangerous-inner-html-dynamic` fixture/pin below (tracked: #2215).
|
|
105
105
|
'dangerous-inner-html-dynamic': [{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2215' }],
|
|
106
|
+
// #2273: a method call on a prop typed as a built-in host rich type
|
|
107
|
+
// (Date, Map, …) has no catalogued lowering in any adapter — this is a
|
|
108
|
+
// compiler-level refusal (`checkRichTypeMethodCalls`, wired ahead of
|
|
109
|
+
// `adapter.generate()`), not an adapter-specific gap, so it is pinned
|
|
110
|
+
// identically across every adapter package including Hono.
|
|
111
|
+
'date-method-uncatalogued': [{ code: 'BF021', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2274' }],
|
|
106
112
|
}
|