@barefootjs/erb 0.31.5 → 0.31.6
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 +9 -0
- package/dist/adapter/erb-adapter.d.ts.map +1 -1
- package/dist/adapter/index.js +4 -3
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +15 -8
- package/dist/vite.js +4 -3
- package/package.json +5 -5
- package/src/adapter/erb-adapter.ts +13 -2
- package/src/conformance-pins.ts +14 -5
|
@@ -385,6 +385,15 @@ export declare class ErbAdapter extends BaseAdapter implements IRNodeEmitter<Erb
|
|
|
385
385
|
/** Whether `name` (a signal getter or prop) holds a string value — gates
|
|
386
386
|
* index-access Hash-vs-Array lowering (see `expr/operand.ts`). */
|
|
387
387
|
private _isStringValueName;
|
|
388
|
+
/**
|
|
389
|
+
* `escape` is the structured claim (#2613) — populate it only with kinds
|
|
390
|
+
* a conformance twin actually demonstrates for this shape, since
|
|
391
|
+
* `escape-coverage.test.ts` checks claims against the twins. The prose
|
|
392
|
+
* in `reason` may legitimately offer more than the structured field
|
|
393
|
+
* (ERB's numbered list opens with an inline-rewrite option that no twin
|
|
394
|
+
* proves); prose stays authoritative for humans, this field for
|
|
395
|
+
* machines.
|
|
396
|
+
*/
|
|
388
397
|
private _recordExprBF101;
|
|
389
398
|
/** Internal hook for higher-order: predicate body re-uses the filter emitter. */
|
|
390
399
|
private _renderRubyFilterExprPublic;
|
|
@@ -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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"}
|
package/dist/adapter/index.js
CHANGED
|
@@ -188768,7 +188768,7 @@ ${whenTrue}
|
|
|
188768
188768
|
this._recordExprBF101(`Loop array \`${arrayName}\` is a component-scope const computed from a runtime expression the ERB adapter cannot evaluate at SSR render time.`, `Options:
|
|
188769
188769
|
1. Inline the array expression directly in the .map() call instead of a preceding const.
|
|
188770
188770
|
2. Mark the loop position as @client-only so the array materialises on the client.
|
|
188771
|
-
3. Precompute the value server-side and pass it in as a prop
|
|
188771
|
+
3. Precompute the value server-side and pass it in as a prop.`, [{ kind: "prop-precompute" }, { kind: "client-directive" }]);
|
|
188772
188772
|
}
|
|
188773
188773
|
}
|
|
188774
188774
|
const rawArray = staticArray ?? this.convertExpressionToRuby(loop.array);
|
|
@@ -189217,7 +189217,7 @@ Options:
|
|
|
189217
189217
|
_isStringValueName(name) {
|
|
189218
189218
|
return this.stringValueNames.has(name);
|
|
189219
189219
|
}
|
|
189220
|
-
_recordExprBF101(message, reason) {
|
|
189220
|
+
_recordExprBF101(message, reason, escape) {
|
|
189221
189221
|
this.errors.push({
|
|
189222
189222
|
code: "BF101",
|
|
189223
189223
|
severity: "error",
|
|
@@ -189230,7 +189230,8 @@ Options:
|
|
|
189230
189230
|
1. Use /* @client */ for client-side evaluation
|
|
189231
189231
|
2. Pre-compute the value in Ruby` : `Options:
|
|
189232
189232
|
1. Use /* @client */ for client-side evaluation
|
|
189233
|
-
2. Pre-compute the value in Ruby
|
|
189233
|
+
2. Pre-compute the value in Ruby`,
|
|
189234
|
+
...escape ? { escape } : {}
|
|
189234
189235
|
}
|
|
189235
189236
|
});
|
|
189236
189237
|
}
|
|
@@ -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,eAkJ7B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -188768,7 +188768,7 @@ ${whenTrue}
|
|
|
188768
188768
|
this._recordExprBF101(`Loop array \`${arrayName}\` is a component-scope const computed from a runtime expression the ERB adapter cannot evaluate at SSR render time.`, `Options:
|
|
188769
188769
|
1. Inline the array expression directly in the .map() call instead of a preceding const.
|
|
188770
188770
|
2. Mark the loop position as @client-only so the array materialises on the client.
|
|
188771
|
-
3. Precompute the value server-side and pass it in as a prop
|
|
188771
|
+
3. Precompute the value server-side and pass it in as a prop.`, [{ kind: "prop-precompute" }, { kind: "client-directive" }]);
|
|
188772
188772
|
}
|
|
188773
188773
|
}
|
|
188774
188774
|
const rawArray = staticArray ?? this.convertExpressionToRuby(loop.array);
|
|
@@ -189217,7 +189217,7 @@ Options:
|
|
|
189217
189217
|
_isStringValueName(name) {
|
|
189218
189218
|
return this.stringValueNames.has(name);
|
|
189219
189219
|
}
|
|
189220
|
-
_recordExprBF101(message, reason) {
|
|
189220
|
+
_recordExprBF101(message, reason, escape) {
|
|
189221
189221
|
this.errors.push({
|
|
189222
189222
|
code: "BF101",
|
|
189223
189223
|
severity: "error",
|
|
@@ -189230,7 +189230,8 @@ Options:
|
|
|
189230
189230
|
1. Use /* @client */ for client-side evaluation
|
|
189231
189231
|
2. Pre-compute the value in Ruby` : `Options:
|
|
189232
189232
|
1. Use /* @client */ for client-side evaluation
|
|
189233
|
-
2. Pre-compute the value in Ruby
|
|
189233
|
+
2. Pre-compute the value in Ruby`,
|
|
189234
|
+
...escape ? { escape } : {}
|
|
189234
189235
|
}
|
|
189235
189236
|
});
|
|
189236
189237
|
}
|
|
@@ -189254,14 +189255,20 @@ var conformancePins = {
|
|
|
189254
189255
|
"tag-cloud": [{ code: "BF021", severity: "error" }],
|
|
189255
189256
|
"preamble-cells": [{ code: "BF021", severity: "error" }],
|
|
189256
189257
|
"static-array-from-props": [
|
|
189257
|
-
{
|
|
189258
|
+
{
|
|
189259
|
+
code: "BF101",
|
|
189260
|
+
severity: "error",
|
|
189261
|
+
issue: "https://github.com/piconic-ai/barefootjs/issues/2321"
|
|
189262
|
+
}
|
|
189258
189263
|
],
|
|
189259
189264
|
"static-array-from-props-with-component": [
|
|
189260
|
-
{
|
|
189261
|
-
|
|
189262
|
-
|
|
189263
|
-
|
|
189265
|
+
{
|
|
189266
|
+
code: "BF101",
|
|
189267
|
+
severity: "error",
|
|
189268
|
+
issue: "https://github.com/piconic-ai/barefootjs/issues/2321"
|
|
189269
|
+
}
|
|
189264
189270
|
],
|
|
189271
|
+
"filter-nested-find-predicate": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2320" }],
|
|
189265
189272
|
"date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2356" }]
|
|
189266
189273
|
};
|
|
189267
189274
|
// src/render-divergences.ts
|
package/dist/vite.js
CHANGED
|
@@ -6451,7 +6451,7 @@ ${whenTrue}
|
|
|
6451
6451
|
this._recordExprBF101(`Loop array \`${arrayName}\` is a component-scope const computed from a runtime expression the ERB adapter cannot evaluate at SSR render time.`, `Options:
|
|
6452
6452
|
1. Inline the array expression directly in the .map() call instead of a preceding const.
|
|
6453
6453
|
2. Mark the loop position as @client-only so the array materialises on the client.
|
|
6454
|
-
3. Precompute the value server-side and pass it in as a prop
|
|
6454
|
+
3. Precompute the value server-side and pass it in as a prop.`, [{ kind: "prop-precompute" }, { kind: "client-directive" }]);
|
|
6455
6455
|
}
|
|
6456
6456
|
}
|
|
6457
6457
|
const rawArray = staticArray ?? this.convertExpressionToRuby(loop.array);
|
|
@@ -6900,7 +6900,7 @@ Options:
|
|
|
6900
6900
|
_isStringValueName(name) {
|
|
6901
6901
|
return this.stringValueNames.has(name);
|
|
6902
6902
|
}
|
|
6903
|
-
_recordExprBF101(message, reason) {
|
|
6903
|
+
_recordExprBF101(message, reason, escape) {
|
|
6904
6904
|
this.errors.push({
|
|
6905
6905
|
code: "BF101",
|
|
6906
6906
|
severity: "error",
|
|
@@ -6913,7 +6913,8 @@ Options:
|
|
|
6913
6913
|
1. Use /* @client */ for client-side evaluation
|
|
6914
6914
|
2. Pre-compute the value in Ruby` : `Options:
|
|
6915
6915
|
1. Use /* @client */ for client-side evaluation
|
|
6916
|
-
2. Pre-compute the value in Ruby
|
|
6916
|
+
2. Pre-compute the value in Ruby`,
|
|
6917
|
+
...escape ? { escape } : {}
|
|
6917
6918
|
}
|
|
6918
6919
|
});
|
|
6919
6920
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barefootjs/erb",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.6",
|
|
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,7 +54,7 @@
|
|
|
54
54
|
"directory": "packages/adapter-erb"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@barefootjs/shared": "0.31.
|
|
57
|
+
"@barefootjs/shared": "0.31.6"
|
|
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.31.
|
|
75
|
-
"@barefootjs/vite": "0.31.
|
|
76
|
-
"@barefootjs/client": "0.31.
|
|
74
|
+
"@barefootjs/jsx": "0.31.6",
|
|
75
|
+
"@barefootjs/vite": "0.31.6",
|
|
76
|
+
"@barefootjs/client": "0.31.6",
|
|
77
77
|
"typescript": "^5.0.0",
|
|
78
78
|
"vite": "^6.0.0"
|
|
79
79
|
}
|
|
@@ -97,7 +97,7 @@ import {
|
|
|
97
97
|
BindingScope,
|
|
98
98
|
} from '@barefootjs/jsx'
|
|
99
99
|
import { isAriaBooleanAttr, isBooleanResultExpr, isExplicitStringCall } from './boolean-result.ts'
|
|
100
|
-
import type { ParsedExpr, LoweringMatcher, LoopBindingPathSegment } from '@barefootjs/jsx'
|
|
100
|
+
import type { ParsedExpr, LoweringMatcher, LoopBindingPathSegment, EscapeKind } from '@barefootjs/jsx'
|
|
101
101
|
import { BF_SLOT, BF_COND, BF_REGION, escapeHtml } from '@barefootjs/shared'
|
|
102
102
|
|
|
103
103
|
import type { ErbRenderCtx } from './lib/types.ts'
|
|
@@ -981,6 +981,7 @@ export class ErbAdapter extends BaseAdapter implements IRNodeEmitter<ErbRenderCt
|
|
|
981
981
|
this._recordExprBF101(
|
|
982
982
|
`Loop array \`${arrayName}\` is a component-scope const computed from a runtime expression the ERB adapter cannot evaluate at SSR render time.`,
|
|
983
983
|
`Options:\n1. Inline the array expression directly in the .map() call instead of a preceding const.\n2. Mark the loop position as @client-only so the array materialises on the client.\n3. Precompute the value server-side and pass it in as a prop.`,
|
|
984
|
+
[{ kind: 'prop-precompute' }, { kind: 'client-directive' }],
|
|
984
985
|
)
|
|
985
986
|
}
|
|
986
987
|
}
|
|
@@ -1961,7 +1962,16 @@ export class ErbAdapter extends BaseAdapter implements IRNodeEmitter<ErbRenderCt
|
|
|
1961
1962
|
return this.stringValueNames.has(name)
|
|
1962
1963
|
}
|
|
1963
1964
|
|
|
1964
|
-
|
|
1965
|
+
/**
|
|
1966
|
+
* `escape` is the structured claim (#2613) — populate it only with kinds
|
|
1967
|
+
* a conformance twin actually demonstrates for this shape, since
|
|
1968
|
+
* `escape-coverage.test.ts` checks claims against the twins. The prose
|
|
1969
|
+
* in `reason` may legitimately offer more than the structured field
|
|
1970
|
+
* (ERB's numbered list opens with an inline-rewrite option that no twin
|
|
1971
|
+
* proves); prose stays authoritative for humans, this field for
|
|
1972
|
+
* machines.
|
|
1973
|
+
*/
|
|
1974
|
+
private _recordExprBF101(message: string, reason?: string, escape?: ReadonlyArray<{ kind: EscapeKind }>): void {
|
|
1965
1975
|
this.errors.push({
|
|
1966
1976
|
code: 'BF101',
|
|
1967
1977
|
severity: 'error',
|
|
@@ -1971,6 +1981,7 @@ export class ErbAdapter extends BaseAdapter implements IRNodeEmitter<ErbRenderCt
|
|
|
1971
1981
|
message: reason
|
|
1972
1982
|
? `${reason}\n\nOptions:\n1. Use /* @client */ for client-side evaluation\n2. Pre-compute the value in Ruby`
|
|
1973
1983
|
: 'Options:\n1. Use /* @client */ for client-side evaluation\n2. Pre-compute the value in Ruby',
|
|
1984
|
+
...(escape ? { escape } : {}),
|
|
1974
1985
|
},
|
|
1975
1986
|
})
|
|
1976
1987
|
}
|
package/src/conformance-pins.ts
CHANGED
|
@@ -16,6 +16,9 @@ export const conformancePins: ConformancePins = {
|
|
|
16
16
|
// JS-runtime target runs it, a DSL adapter surfaces BF021 + `/* @client */`.
|
|
17
17
|
// See spec/callback-fidelity.md.
|
|
18
18
|
'filter-typeof-predicate': [{ code: 'BF021', severity: 'error' }],
|
|
19
|
+
// Array-builder `.map()` body (imperative `push`-into-array preamble):
|
|
20
|
+
// BF021, with a verified `/* @client */` escape — `map-array-builder-
|
|
21
|
+
// body-client` (#2613). See that fixture's docstring.
|
|
19
22
|
'map-array-builder-body': [{ code: 'BF021', severity: 'error' }],
|
|
20
23
|
'map-array-builder-escaping': [{ code: 'BF021', severity: 'error' }],
|
|
21
24
|
// `.fill(value)` mutates the receiver in place — no template lowering
|
|
@@ -82,12 +85,20 @@ export const conformancePins: ConformancePins = {
|
|
|
82
85
|
// "Loop array is a bare identifier..." comment) rather than faked as
|
|
83
86
|
// BF104 or silently producing broken Ruby.
|
|
84
87
|
'static-array-from-props': [
|
|
85
|
-
{
|
|
88
|
+
{
|
|
89
|
+
code: 'BF101',
|
|
90
|
+
severity: 'error',
|
|
91
|
+
issue: 'https://github.com/piconic-ai/barefootjs/issues/2321',
|
|
92
|
+
},
|
|
86
93
|
],
|
|
87
94
|
// BF103 (imported child in the loop body) no longer fires now that the
|
|
88
95
|
// conformance harness passes `siblingTemplatesRegistered: true` (#2205).
|
|
89
96
|
'static-array-from-props-with-component': [
|
|
90
|
-
{
|
|
97
|
+
{
|
|
98
|
+
code: 'BF101',
|
|
99
|
+
severity: 'error',
|
|
100
|
+
issue: 'https://github.com/piconic-ai/barefootjs/issues/2321',
|
|
101
|
+
},
|
|
91
102
|
],
|
|
92
103
|
// #2087 Phase B: `isLowerableLoopDestructure` now admits every fixed-
|
|
93
104
|
// binding shape (any field/index depth — `destructure-array-index-in-map`,
|
|
@@ -108,9 +119,7 @@ export const conformancePins: ConformancePins = {
|
|
|
108
119
|
// lowers it to a real inline Ruby block predicate and must render to
|
|
109
120
|
// Hono parity instead.
|
|
110
121
|
// Faithful lowering tracked: https://github.com/piconic-ai/barefootjs/issues/2320 (successor to #2038)
|
|
111
|
-
'filter-nested-find-predicate': [
|
|
112
|
-
{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2320' },
|
|
113
|
-
],
|
|
122
|
+
'filter-nested-find-predicate': [{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2320' }],
|
|
114
123
|
// #1467 demo-corpus context providers (`radio-group`, `accordion`,
|
|
115
124
|
// `dialog`, `popover`, `select`, `dropdown-menu`, `combobox`,
|
|
116
125
|
// `command`) are NOT pinned — an object-literal provider value lowers
|