@barefootjs/erb 0.17.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/analysis/component-tree.d.ts +24 -0
- package/dist/adapter/analysis/component-tree.d.ts.map +1 -0
- package/dist/adapter/boolean-result.d.ts +66 -0
- package/dist/adapter/boolean-result.d.ts.map +1 -0
- package/dist/adapter/emit-context.d.ts +107 -0
- package/dist/adapter/emit-context.d.ts.map +1 -0
- package/dist/adapter/erb-adapter.d.ts +374 -0
- package/dist/adapter/erb-adapter.d.ts.map +1 -0
- package/dist/adapter/expr/array-method.d.ts +87 -0
- package/dist/adapter/expr/array-method.d.ts.map +1 -0
- package/dist/adapter/expr/emitters.d.ts +102 -0
- package/dist/adapter/expr/emitters.d.ts.map +1 -0
- package/dist/adapter/expr/operand.d.ts +34 -0
- package/dist/adapter/expr/operand.d.ts.map +1 -0
- package/dist/adapter/index.d.ts +6 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +189154 -0
- package/dist/adapter/lib/constants.d.ts +25 -0
- package/dist/adapter/lib/constants.d.ts.map +1 -0
- package/dist/adapter/lib/ir-scope.d.ts +27 -0
- package/dist/adapter/lib/ir-scope.d.ts.map +1 -0
- package/dist/adapter/lib/ruby-naming.d.ts +65 -0
- package/dist/adapter/lib/ruby-naming.d.ts.map +1 -0
- package/dist/adapter/lib/types.d.ts +28 -0
- package/dist/adapter/lib/types.d.ts.map +1 -0
- package/dist/adapter/memo/seed.d.ts +35 -0
- package/dist/adapter/memo/seed.d.ts.map +1 -0
- package/dist/adapter/props/prop-classes.d.ts +50 -0
- package/dist/adapter/props/prop-classes.d.ts.map +1 -0
- package/dist/adapter/spread/spread-codegen.d.ts +63 -0
- package/dist/adapter/spread/spread-codegen.d.ts.map +1 -0
- package/dist/adapter/value/parsed-literal.d.ts +21 -0
- package/dist/adapter/value/parsed-literal.d.ts.map +1 -0
- package/dist/build.d.ts +28 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +189174 -0
- package/dist/conformance-pins.d.ts +13 -0
- package/dist/conformance-pins.d.ts.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +189172 -0
- package/lib/barefoot_js/backend/erb.rb +123 -0
- package/lib/barefoot_js/dev_reload.rb +159 -0
- package/lib/barefoot_js/evaluator.rb +714 -0
- package/lib/barefoot_js/search_params.rb +63 -0
- package/lib/barefoot_js.rb +1155 -0
- package/package.json +67 -0
- package/src/__tests__/erb-adapter.test.ts +298 -0
- package/src/adapter/analysis/component-tree.ts +122 -0
- package/src/adapter/boolean-result.ts +157 -0
- package/src/adapter/emit-context.ts +119 -0
- package/src/adapter/erb-adapter.ts +1768 -0
- package/src/adapter/expr/array-method.ts +424 -0
- package/src/adapter/expr/emitters.ts +629 -0
- package/src/adapter/expr/operand.ts +55 -0
- package/src/adapter/index.ts +6 -0
- package/src/adapter/lib/constants.ts +37 -0
- package/src/adapter/lib/ir-scope.ts +51 -0
- package/src/adapter/lib/ruby-naming.ts +127 -0
- package/src/adapter/lib/types.ts +31 -0
- package/src/adapter/memo/seed.ts +75 -0
- package/src/adapter/props/prop-classes.ts +89 -0
- package/src/adapter/spread/spread-codegen.ts +176 -0
- package/src/adapter/value/parsed-literal.ts +29 -0
- package/src/build.ts +37 -0
- package/src/conformance-pins.ts +100 -0
- package/src/index.ts +9 -0
- package/src/test-render.ts +668 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-fixture build-time contracts for shapes the ERB adapter
|
|
3
|
+
* intentionally refuses to lower. Mirrors mojo's set — the lowering
|
|
4
|
+
* gates (`isLowerableLoopDestructure`, `collectImportedLoopChild
|
|
5
|
+
* ComponentErrors`, `refuseUnsupportedAttrExpression`, the #2038
|
|
6
|
+
* nested-higher-order-callback gate) are shared code in `@barefootjs/jsx`
|
|
7
|
+
* that every EP/ERB-family adapter reuses verbatim. Consumed by this
|
|
8
|
+
* package's own conformance test (as `expectedDiagnostics`) and by
|
|
9
|
+
* `bf compat` (issue-URL attribution).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ConformancePins } from '@barefootjs/jsx'
|
|
13
|
+
|
|
14
|
+
export const conformancePins: ConformancePins = {
|
|
15
|
+
// Sibling-imported child component in a loop body: emits a
|
|
16
|
+
// cross-template call needing separate registration. BF103 makes
|
|
17
|
+
// the requirement loud (same as mojo).
|
|
18
|
+
'static-array-children': [{ code: 'BF103', severity: 'error' }],
|
|
19
|
+
// TodoApp / TodoAppSSR import `TodoItem` from a sibling file and
|
|
20
|
+
// call it inside a keyed `.map`. Same BF103 surface as the
|
|
21
|
+
// synthetic `static-array-children` above — pinned at adapter
|
|
22
|
+
// level so the shared-component corpus stays adapter-neutral.
|
|
23
|
+
'todo-app': [{ code: 'BF103', severity: 'error' }],
|
|
24
|
+
'todo-app-ssr': [{ code: 'BF103', severity: 'error' }],
|
|
25
|
+
// `static-array-from-props` / `static-array-from-props-with-component`:
|
|
26
|
+
// the `.map(([emoji, users]) => …)` / `.map(([id, t]) => …)` callback is
|
|
27
|
+
// a plain array-index destructure (the `.filter(...)` runs on a
|
|
28
|
+
// separate `const entries = …` statement, so `loop.filterPredicate` is
|
|
29
|
+
// unset — this is not the `.filter().map(destructure)` chain
|
|
30
|
+
// `isLowerableLoopDestructure` still refuses), and #2087 Phase B's
|
|
31
|
+
// segments-walking accessor DOES lower it natively. But both fixtures'
|
|
32
|
+
// loop array is that same `entries` — a component-scope `const`
|
|
33
|
+
// computed from `Object.entries(props.x).filter(...)`, a runtime
|
|
34
|
+
// expression the ERB adapter has no mechanism to evaluate at SSR
|
|
35
|
+
// render time (only a pure-literal or module-string const is ever
|
|
36
|
+
// inlined; a computed const falls through to an unseeded `v[:entries]`
|
|
37
|
+
// and crashes). This is a pre-existing, orthogonal gap the widened
|
|
38
|
+
// destructure gate merely exposes — it reproduces identically with a
|
|
39
|
+
// non-destructured param (verified) — not a destructure-lowering
|
|
40
|
+
// limitation, so it is NOT part of #2087's scope. Tracked as its own
|
|
41
|
+
// gap under https://github.com/piconic-ai/barefootjs/issues/2087;
|
|
42
|
+
// pinned honestly as BF101 (the adapter's own check, see `renderLoop`'s
|
|
43
|
+
// "Loop array is a bare identifier..." comment) rather than faked as
|
|
44
|
+
// BF104 or silently producing broken Ruby.
|
|
45
|
+
'static-array-from-props': [
|
|
46
|
+
{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2087' },
|
|
47
|
+
],
|
|
48
|
+
'static-array-from-props-with-component': [
|
|
49
|
+
{ code: 'BF103', severity: 'error' },
|
|
50
|
+
{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2087' },
|
|
51
|
+
],
|
|
52
|
+
// #2087 Phase B: `isLowerableLoopDestructure` now admits every fixed-
|
|
53
|
+
// binding shape (any field/index depth — `destructure-array-index-in-map`,
|
|
54
|
+
// `destructure-nested-object-in-map`), array-rest (`rest-destructure-
|
|
55
|
+
// array-in-map`, native `bf.slice`), and object-rest whose every use is a
|
|
56
|
+
// member read or a `{...rest}` spread onto an intrinsic element
|
|
57
|
+
// (`rest-destructure-object-in-map`, `rest-destructure-object-spread-in-
|
|
58
|
+
// map`, `rest-destructure-nested-in-map` — native `Hash#except` builds a
|
|
59
|
+
// true residual Hash). None of the six destructure-in-map fixtures are
|
|
60
|
+
// pinned here any more; all render to Hono parity. See
|
|
61
|
+
// `rubyAccessorFromSegments` / the object-rest-in-loop branch in
|
|
62
|
+
// `erb-adapter.ts`'s `renderLoop`.
|
|
63
|
+
// #2038: a filter predicate containing a nested `.find(...)` callback.
|
|
64
|
+
// `find*` returns an element, not a boolean — there is no inline
|
|
65
|
+
// predicate form, and the emitter used to silently degrade the call to
|
|
66
|
+
// its receiver. The nested `.some` sibling
|
|
67
|
+
// (`filter-nested-callback-predicate`) is NOT pinned: like mojo, ERB
|
|
68
|
+
// lowers it to a real inline Ruby block predicate and must render to
|
|
69
|
+
// Hono parity instead.
|
|
70
|
+
// https://github.com/piconic-ai/barefootjs/issues/2038
|
|
71
|
+
'filter-nested-find-predicate': [
|
|
72
|
+
{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2038' },
|
|
73
|
+
],
|
|
74
|
+
// #1467 demo-corpus context providers (`radio-group`, `accordion`,
|
|
75
|
+
// `dialog`, `popover`, `select`, `dropdown-menu`, `combobox`,
|
|
76
|
+
// `command`) are NOT pinned — an object-literal provider value lowers
|
|
77
|
+
// to a Ruby Hash via `parseProviderObjectLiteral` (#1897): getter
|
|
78
|
+
// members snapshot their body's SSR value, handler / function-shaped
|
|
79
|
+
// members lower to `nil`.
|
|
80
|
+
//
|
|
81
|
+
// `button` / `kbd` are NOT pinned (unlike xslate): the auto-inferred
|
|
82
|
+
// `<Slot>` sibling's `{...props}` / `{...children.props}` spread onto
|
|
83
|
+
// its root element lowers via Ruby's native `**hash` double-splat in
|
|
84
|
+
// the component-invocation Hash literal — the same shape mojo's EP
|
|
85
|
+
// `%{$props}` flatten already handles.
|
|
86
|
+
//
|
|
87
|
+
// `data-table` is NOT pinned here either — it compiles clean
|
|
88
|
+
// (`selected()[index]` → `index-access`, `.toFixed(2)` →
|
|
89
|
+
// `bf.to_fixed`, `/* @client */` memo SSR-folded) and renders to Hono
|
|
90
|
+
// parity. It stays in `skipMarkerConformance` below for the shared
|
|
91
|
+
// `/* @client */` keyed-map slot-id elision contract only (same as
|
|
92
|
+
// `todo-app`), not a render or BF101 gap.
|
|
93
|
+
//
|
|
94
|
+
// #2073 follow-up: a function-reference `.map(format)` callback has no
|
|
95
|
+
// arrow body to serialize — not a CALLBACK_METHODS shape — so the
|
|
96
|
+
// UNSUPPORTED_METHODS gate (shared `@barefootjs/jsx` code) refuses it
|
|
97
|
+
// with BF101 rather than emitting a broken template. Same pin as
|
|
98
|
+
// mojo/xslate.
|
|
99
|
+
'array-map-function-reference': [{ code: 'BF101', severity: 'error' }],
|
|
100
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BarefootJS ERB (Embedded Ruby) Template Adapter
|
|
3
|
+
*
|
|
4
|
+
* Generates ERB template files (.erb) from BarefootJS IR.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export { ErbAdapter, erbAdapter } from './adapter/index.ts'
|
|
8
|
+
export type { ErbAdapterOptions } from './adapter/index.ts'
|
|
9
|
+
export { conformancePins } from './conformance-pins.ts'
|