@barefootjs/jinja 0.31.5 → 0.31.7

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.
@@ -188644,7 +188644,8 @@ ${whenTrue}
188644
188644
  message: `Loop array \`${arrayName}\` is a local computed value (\`${arrayConst.value}\`) that the Jinja adapter cannot bind as a template variable — only numeric/string-literal locals inline at their use site.`,
188645
188645
  loc: loop.loc ?? { file: this.componentName + ".tsx", start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
188646
188646
  suggestion: {
188647
- message: "Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client."
188647
+ message: "Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client.",
188648
+ escape: [{ kind: "prop-precompute" }, { kind: "client-directive" }]
188648
188649
  }
188649
188650
  });
188650
188651
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jinja-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/jinja-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jinja-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/jinja-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  /**
2
- * Per-fixture build-time contracts for shapes the Jinja adapter
3
- * intentionally refuses to lower. Mirrors xslate's set the lowering
4
- * gates are shared code paths in the ported adapter (BF103/BF104 are
5
- * structural: cross-template child registration / destructure-loop-param
6
- * limits that apply identically regardless of target template language).
7
- * Consumed by this package's own conformance test (as `expectedDiagnostics`)
8
- * and by `bf compat` (issue-URL attribution).
2
+ * Per-fixture build-time contracts for shapes this adapter intentionally
3
+ * refuses to lower. Declared per adapter, not on the shared fixtures, so
4
+ * adding a new adapter never touches a cross-adapter file. Per-fixture
5
+ * rationale lives on each fixture's docstring
6
+ * (`packages/adapter-tests/fixtures/<id>.ts`) and spec/callback-fidelity.md;
7
+ * comments below only mark where this adapter's set diverges from siblings.
9
8
  */
10
9
  import type { ConformancePins } from '@barefootjs/jsx';
11
10
  export declare const conformancePins: ConformancePins;
@@ -1 +1 @@
1
- {"version":3,"file":"conformance-pins.d.ts","sourceRoot":"","sources":["../src/conformance-pins.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,eAyI7B,CAAA"}
1
+ {"version":3,"file":"conformance-pins.d.ts","sourceRoot":"","sources":["../src/conformance-pins.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,eA+C7B,CAAA"}
package/dist/index.js CHANGED
@@ -188644,7 +188644,8 @@ ${whenTrue}
188644
188644
  message: `Loop array \`${arrayName}\` is a local computed value (\`${arrayConst.value}\`) that the Jinja adapter cannot bind as a template variable — only numeric/string-literal locals inline at their use site.`,
188645
188645
  loc: loop.loc ?? { file: this.componentName + ".tsx", start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
188646
188646
  suggestion: {
188647
- message: "Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client."
188647
+ message: "Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client.",
188648
+ escape: [{ kind: "prop-precompute" }, { kind: "client-directive" }]
188648
188649
  }
188649
188650
  });
188650
188651
  }
@@ -189232,18 +189233,25 @@ var conformancePins = {
189232
189233
  "tag-cloud": [{ code: "BF021", severity: "error" }],
189233
189234
  "preamble-cells": [{ code: "BF021", severity: "error" }],
189234
189235
  "static-array-from-props": [
189235
- { code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2321" }
189236
+ {
189237
+ code: "BF101",
189238
+ severity: "error",
189239
+ issue: "https://github.com/piconic-ai/barefootjs/issues/2321"
189240
+ }
189236
189241
  ],
189237
189242
  "static-array-from-props-with-component": [
189238
- { code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2321" }
189243
+ {
189244
+ code: "BF101",
189245
+ severity: "error",
189246
+ issue: "https://github.com/piconic-ai/barefootjs/issues/2321"
189247
+ }
189239
189248
  ],
189240
189249
  "filter-nested-callback-predicate": [
189241
189250
  { code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2320" }
189242
189251
  ],
189243
- "filter-nested-find-predicate": [
189244
- { code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2320" }
189245
- ],
189246
- "date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2356" }]
189252
+ "filter-nested-find-predicate": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2320" }],
189253
+ "date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2356" }],
189254
+ "rich-prop-client-read": [{ code: "BF049", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2648" }]
189247
189255
  };
189248
189256
  // src/render-divergences.ts
189249
189257
  var renderDivergences = {};
@@ -1,15 +1,10 @@
1
1
  /**
2
- * Render-level divergences against the shared conformance corpus
3
- * (Priority-12 edge-case sweep, #2168): fixtures that COMPILE clean on
4
- * this adapter but whose rendered output diverges from the Hono
5
- * reference on real Python jinja2.
6
- *
7
- * Consumed by this package's conformance test (its `skipJsx` set is
8
- * derived from these keys, so the skip list and this declaration can't
9
- * drift) and by `packages/compat`, which publishes the entries in the
10
- * fixture-divergences section of `ui/compat.lock.json` — surfaced on
11
- * the docs compatibility-matrix page. Graduating an entry means fixing
12
- * the adapter (or the shared compiler layer) and deleting the line.
2
+ * Fixtures that compile clean on this adapter but render divergent from the
3
+ * Hono reference on real Python jinja2. The conformance `skipJsx` set and
4
+ * `packages/compat`'s published fixture-divergences both derive from this
5
+ * one object, so the skip list and the declaration can't drift. Keep the
6
+ * file even when the set is empty — the next divergence lands here, not in
7
+ * a re-created file.
13
8
  */
14
9
  import type { RenderDivergences } from '@barefootjs/jsx';
15
10
  export declare const renderDivergences: RenderDivergences;
@@ -1 +1 @@
1
- {"version":3,"file":"render-divergences.d.ts","sourceRoot":"","sources":["../src/render-divergences.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,eAAO,MAAM,iBAAiB,EAAE,iBAM/B,CAAA"}
1
+ {"version":3,"file":"render-divergences.d.ts","sourceRoot":"","sources":["../src/render-divergences.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,eAAO,MAAM,iBAAiB,EAAE,iBAC/B,CAAA"}
package/dist/vite.js CHANGED
@@ -2310,6 +2310,7 @@ var ErrorCodes = {
2310
2310
  COMPONENT_REQUIRED_PROP_MISSING: "BF046",
2311
2311
  JSX_BRANCH_LOCAL_IN_CALLBACK: "BF047",
2312
2312
  SIBLING_COMPONENT_NOT_COMPILED: "BF048",
2313
+ RICH_TYPE_PROP_NOT_HYDRATABLE: "BF049",
2313
2314
  SHARED_PROGRAM_REQUIRED: "BF050",
2314
2315
  WRONG_PACKAGE_IMPORT: "BF051",
2315
2316
  BUILTIN_REQUIRES_IMPORT: "BF054",
@@ -2340,6 +2341,7 @@ var errorMessages = {
2340
2341
  [ErrorCodes.COMPONENT_REQUIRED_PROP_MISSING]: "Built-in component is missing a required prop.",
2341
2342
  [ErrorCodes.JSX_BRANCH_LOCAL_IN_CALLBACK]: "JSX-typed local declared inside an `if`-block cannot be referenced from a callback body (ref / event handler). " + "Render it as a child instead: `<div ref={...}>{local}</div>`.",
2342
2343
  [ErrorCodes.SIBLING_COMPONENT_NOT_COMPILED]: "Referenced component did not compile to a template, so this reference would throw " + "`ReferenceError` at render time. Multi-return JSX dispatch (a `switch` or `if`/`else` " + "chain across multiple JSX-returning branches) cannot compile as a component in a " + `'use client' file. Extract it to a separate non-"use client" file (where it is preserved ` + "verbatim, see #932), or rewrite it as a single-return ternary/conditional chain so the " + "component pipeline can compile it.",
2344
+ [ErrorCodes.RICH_TYPE_PROP_NOT_HYDRATABLE]: "Rich-typed prop cannot cross the bf-p hydration boundary as JSON.",
2343
2345
  [ErrorCodes.SHARED_PROGRAM_REQUIRED]: "Shared ts.Program required for type-based reactivity classification. This source imports a Reactive<T>-branded library (e.g. @barefootjs/form) whose getters cannot be classified by regex alone. Pass `options.program` (built via `createProgramForCorpus`) so the analyzer can resolve the brand through the TypeChecker.",
2344
2346
  [ErrorCodes.WRONG_PACKAGE_IMPORT]: "Import from wrong package.",
2345
2347
  [ErrorCodes.BUILTIN_REQUIRES_IMPORT]: "Built-in <Async> / <Region> must be imported from '@barefootjs/client'. " + "The compiler recognises these tags by their import (not by tag name), " + "so an unimported tag with this name is treated as an undeclared component.",
@@ -2373,6 +2375,8 @@ var HOST_RICH_TYPE_NAMES = new Set([
2373
2375
  "BigInt",
2374
2376
  "Function"
2375
2377
  ]);
2378
+ var JSON_REVIVABLE_RICH_TYPE_NAMES = new Set(["Date", "URL"]);
2379
+ var JSON_UNSAFE_RICH_TYPE_NAMES = new Set([...HOST_RICH_TYPE_NAMES].filter((n) => !JSON_REVIVABLE_RICH_TYPE_NAMES.has(n)));
2376
2380
  function baseTypeName(raw) {
2377
2381
  const idx = raw.indexOf("<");
2378
2382
  return (idx === -1 ? raw : raw.slice(0, idx)).trim();
@@ -6382,7 +6386,8 @@ ${whenTrue}
6382
6386
  message: `Loop array \`${arrayName}\` is a local computed value (\`${arrayConst.value}\`) that the Jinja adapter cannot bind as a template variable — only numeric/string-literal locals inline at their use site.`,
6383
6387
  loc: loop.loc ?? { file: this.componentName + ".tsx", start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
6384
6388
  suggestion: {
6385
- message: "Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client."
6389
+ message: "Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client.",
6390
+ escape: [{ kind: "prop-precompute" }, { kind: "client-directive" }]
6386
6391
  }
6387
6392
  });
6388
6393
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barefootjs/jinja",
3
- "version": "0.31.5",
3
+ "version": "0.31.7",
4
4
  "description": "Jinja2 adapter for BarefootJS — compiles IR to .jinja templates and ships the Python BarefootJS rendering runtime; runs under any Python web framework (Flask, etc.)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -53,7 +53,7 @@
53
53
  "directory": "packages/adapter-jinja"
54
54
  },
55
55
  "dependencies": {
56
- "@barefootjs/shared": "0.31.5"
56
+ "@barefootjs/shared": "0.31.7"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "@barefootjs/jsx": ">=0.2.0",
@@ -70,9 +70,9 @@
70
70
  },
71
71
  "devDependencies": {
72
72
  "@barefootjs/adapter-tests": "0.1.0",
73
- "@barefootjs/jsx": "0.31.5",
74
- "@barefootjs/vite": "0.31.5",
75
- "@barefootjs/client": "0.31.5",
73
+ "@barefootjs/jsx": "0.31.7",
74
+ "@barefootjs/vite": "0.31.7",
75
+ "@barefootjs/client": "0.31.7",
76
76
  "typescript": "^5.0.0",
77
77
  "vite": "^6.0.0"
78
78
  }
@@ -842,6 +842,7 @@ export class JinjaAdapter extends BaseAdapter implements IRNodeEmitter<JinjaRend
842
842
  suggestion: {
843
843
  message:
844
844
  'Pre-compute the array server-side and pass it as a prop, or mark the loop position as @client-only so it runs in JS on the client.',
845
+ escape: [{ kind: 'prop-precompute' }, { kind: 'client-directive' }],
845
846
  },
846
847
  })
847
848
  }
@@ -1,150 +1,59 @@
1
1
  /**
2
- * Per-fixture build-time contracts for shapes the Jinja adapter
3
- * intentionally refuses to lower. Mirrors xslate's set the lowering
4
- * gates are shared code paths in the ported adapter (BF103/BF104 are
5
- * structural: cross-template child registration / destructure-loop-param
6
- * limits that apply identically regardless of target template language).
7
- * Consumed by this package's own conformance test (as `expectedDiagnostics`)
8
- * and by `bf compat` (issue-URL attribution).
2
+ * Per-fixture build-time contracts for shapes this adapter intentionally
3
+ * refuses to lower. Declared per adapter, not on the shared fixtures, so
4
+ * adding a new adapter never touches a cross-adapter file. Per-fixture
5
+ * rationale lives on each fixture's docstring
6
+ * (`packages/adapter-tests/fixtures/<id>.ts`) and spec/callback-fidelity.md;
7
+ * comments below only mark where this adapter's set diverges from siblings.
9
8
  */
10
9
 
11
10
  import type { ConformancePins } from '@barefootjs/jsx'
12
11
 
13
12
  export const conformancePins: ConformancePins = {
14
- // Off-subset filter predicate (`typeof`) the compiler can't lower; a
15
- // JS-runtime target runs it, a DSL adapter surfaces BF021 + `/* @client */`.
16
- // See spec/callback-fidelity.md.
17
13
  'filter-typeof-predicate': [{ code: 'BF021', severity: 'error' }],
18
14
  'map-array-builder-body': [{ code: 'BF021', severity: 'error' }],
19
15
  'map-array-builder-escaping': [{ code: 'BF021', severity: 'error' }],
20
- // `.fill(value)` mutates the receiver in place — no template lowering
21
- // on any DSL adapter; a JS-runtime target runs it, a DSL adapter
22
- // surfaces BF101 + `/* @client */`. See spec/callback-fidelity.md.
23
16
  'fill-unsupported': [{ code: 'BF101', severity: 'error' }],
24
- // Off-subset `.find()` / `.some()` / `.every()` predicate (`typeof`) the
25
- // compiler can't lower; a JS-runtime target runs it, a DSL adapter
26
- // surfaces BF101 + `/* @client */`. See spec/callback-fidelity.md.
27
17
  'find-typeof-predicate': [{ code: 'BF101', severity: 'error' }],
28
18
  'some-typeof-predicate': [{ code: 'BF101', severity: 'error' }],
29
19
  'every-typeof-predicate': [{ code: 'BF101', severity: 'error' }],
30
- // Off-subset `.reduce()` / `.reduceRight()` body / `.flatMap()`
31
- // projection (`typeof`) the compiler can't lower; a JS-runtime target
32
- // runs it, a DSL adapter surfaces BF101 + `/* @client */`.
33
- // See spec/callback-fidelity.md.
34
20
  'reduce-typeof-body': [{ code: 'BF101', severity: 'error' }],
35
21
  'reduce-right-typeof-body': [{ code: 'BF101', severity: 'error' }],
36
22
  'flatmap-typeof-projection': [{ code: 'BF101', severity: 'error' }],
37
- // JSX-returning `.flatMap()` body carried as structured segments i.e.
38
- // one with STATEMENTS (early returns, consts): a JS runtime executes it
39
- // verbatim; a DSL template runtime can't, so it refuses with BF021 +
40
- // `/* @client */` (pre-gate this emitted an empty loop body — silent
41
- // divergence). A pure PROJECTION body (`flatMap(it => it.tags.map(...))`,
42
- // e.g. the `flatmap-expression-body` fixture) is NOT pinned: it lowers to
43
- // neutral nested-loop IR this adapter templatizes natively.
44
- // See spec/callback-fidelity.md.
23
+ // A pure PROJECTION flatMap body (`flatmap-expression-body`) is NOT pinned
24
+ // it lowers to neutral nested-loop IR this adapter templatizes natively;
25
+ // only the statement-carrying body refuses.
45
26
  'tag-cloud': [{ code: 'BF021', severity: 'error' }],
46
- // A keyed `.map()` row body whose preamble builds a JSX leaf from item
47
- // state (`cells.push(<td>{stateLabel}</td>)`) embedded as `{cells}` — the
48
- // Stage 3 array-builder carrier, jsRuntime-only: a JS runtime runs it
49
- // verbatim (and patches the region on same-key updates, #2389), a DSL
50
- // adapter refuses with BF021 + `/* @client */`. See spec/callback-fidelity.md.
51
27
  'preamble-cells': [{ code: 'BF021', severity: 'error' }],
52
- // `todo-app` / `todo-app-ssr` no longer pinned (#2205) the conformance
53
- // harness now passes `siblingTemplatesRegistered: true` for fixtures with
54
- // sibling `components`, matching `bf build`'s real semantics, so the
55
- // BF103 loop-body cross-template check no longer fires spuriously. (Both
56
- // fixtures are still skipped on this adapter via `render-divergences.ts`
57
- // — #2209 — for an unrelated signal-seeding gap.)
58
- // `static-array-children` no longer pinned (#2208) — `items`'s
59
- // array-literal initializer is now recognized as fully-static
60
- // (`resolveStaticLoopSource`) and inlined as a native Jinja list/dict
61
- // literal in the `{% for %}` header, the same way a module-scope const's
62
- // value is already seeded.
63
- // #2087 Phase A/B widened the destructure gate (`isLowerableLoopDestructure`)
64
- // to admit array-index / nested-path fixed bindings, so the
65
- // `([emoji, users]) => ...` / `([id, t]) => ...` params in these two
66
- // fixtures no longer trip BF104 — the destructure itself now lowers
67
- // cleanly to a native `{% set %}` accessor. But both fixtures' loop
68
- // array is `entries`, a bare identifier bound to a function-scope local
69
- // const with a NON-inlineable initializer
70
- // (`Object.entries(props.x ?? {}).filter(...)`) — a pre-existing,
71
- // orthogonal limitation this adapter has always had (it only ever
72
- // INLINES a local const's value at its use site — numeric/string
73
- // literal, or a static-record-literal lookup — never binds one as a
74
- // `{% set %}` template local), just never reachable before because the
75
- // narrower pre-#2087 gate refused the destructure param first. Left
76
- // unhandled it would silently render an EMPTY list (Jinja's
77
- // `ChainableUndefined` tolerates iterating an unbound name as zero
78
- // iterations) instead of failing loudly, so `renderLoop` in
79
- // `jinja-adapter.ts` now detects this shape and raises BF101 instead —
80
- // see the "Loop array `<name>` is a local computed value" diagnostic.
81
- // Fixing the underlying gap (computed-array-from-props as a loop
82
- // source) is out of scope for #2087; tracked as a follow-up at
83
- // https://github.com/piconic-ai/barefootjs/issues/2321.
28
+ // Refused for the COMPUTED loop array (`const entries = Object.entries(...)
29
+ // .filter(...)`), not the destructure param (that lowers, #2087) — loud
30
+ // BF101 instead of Jinja's ChainableUndefined silently iterating zero times.
84
31
  'static-array-from-props': [
85
- { code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2321' },
32
+ {
33
+ code: 'BF101',
34
+ severity: 'error',
35
+ issue: 'https://github.com/piconic-ai/barefootjs/issues/2321',
36
+ },
86
37
  ],
87
- // BF101 (unresolvable computed loop array, see above) fires; BF103
88
- // (imported child in the loop body) no longer does now that the
89
- // conformance harness passes `siblingTemplatesRegistered: true` (#2205).
38
+ // No BF103 pin: the harness registers sibling templates (#2205).
90
39
  'static-array-from-props-with-component': [
91
- { code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2321' },
40
+ {
41
+ code: 'BF101',
42
+ severity: 'error',
43
+ issue: 'https://github.com/piconic-ai/barefootjs/issues/2321',
44
+ },
92
45
  ],
93
- // Rest-destructure / structured-path `.map()` callbacks (#2087 Phase B):
94
- // `isLowerableLoopDestructure` now admits fixed bindings at any
95
- // field/index depth, array-rest (`bf.slice`), and object-rest whose uses
96
- // are member reads or a `{...rest}` spread onto an intrinsic element
97
- // (`bf.omit` builds the TRUE residual dict). Each binding becomes a
98
- // native `{% set %}` local off the per-item var — see
99
- // `renderLoop`/`jinjaAccessorFromSegments` in `jinja-adapter.ts`. So
100
- // `rest-destructure-object-in-map`, `rest-destructure-object-spread-in-map`,
101
- // `rest-destructure-array-in-map`, `rest-destructure-nested-in-map`,
102
- // `destructure-array-index-in-map`, and `destructure-nested-object-in-map`
103
- // all render clean now — none of them are pinned here.
104
- // (button/kbd graduated: the site/ui Button/Kbd `<Slot>` `{...props}` /
105
- // `{...children.props}` component-spread now lowers via nested
106
- // `dict(base, **top)` calls — see `jinja-adapter.ts`'s `renderComponent`
107
- // — instead of refusing with BF101, so these two no longer need a pin
108
- // here.)
109
- // (`tagged-template-classname` graduated by #2092 — the tag resolves
110
- // through the interleave-tag catalogue and desugars to an untagged
111
- // template literal, so it lowers like any other className template.)
112
- // #2038: a filter predicate whose body contains a NESTED callback call
113
- // (`t => !picked().some(p => …)` / `t => picked().find(p => …)`). Jinja
114
- // has no inline comprehension-with-nested-callback form usable from the
115
- // evaluator-JSON `*_eval` payload mechanism (this adapter's ONLY
116
- // higher-order-callback lowering path — see `jinja-adapter.ts`'s file
117
- // header, divergence 3), so the compiler is loud (BF101) instead of
118
- // lossy, same as xslate. The `/* @client */` twin
119
- // (`filter-nested-callback-predicate-client`) has no pin here: it must
120
- // render clean on every adapter, which asserts the suppression contract.
121
- // Faithful lowering tracked: https://github.com/piconic-ai/barefootjs/issues/2320 (successor to #2038)
46
+ // #2038: no inline comprehension-with-nested-callback form via the
47
+ // evaluator-JSON `*_eval` mechanism (`jinja-adapter.ts`'s header,
48
+ // divergence 3) loud BF101 instead of lossy.
122
49
  'filter-nested-callback-predicate': [
123
50
  { code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2320' },
124
51
  ],
125
- 'filter-nested-find-predicate': [
126
- { code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2320' },
127
- ],
128
- // NB: TOP-LEVEL `.find` / `.findIndex` / `.findLast` / `.findLastIndex`
129
- // (text position) are NOT pinned here — like xslate (unlike mojo, which
130
- // refuses them), Jinja lowers them to `bf.find_eval` / `find_index_eval`
131
- // / etc. via the same evaluator-JSON mechanism as `.filter` / `.every` /
132
- // `.some`, so they render. Only the NESTED-in-a-predicate form above is
133
- // refused (#2038).
134
- // `array-map-function-reference` no longer pinned — a bare-identifier
135
- // `.map(format)` callback now resolves one hop to its declaration
136
- // (`resolveCallbackMethodFunctionReferences`, #2206), the same mechanism
137
- // #2090 established for `.sort(fnref)`.
138
- // `dangerous-inner-html` no longer pinned — a compile-time string-literal
139
- // `dangerouslySetInnerHTML={{ __html: '...' }}` is spliced directly into
140
- // the template as trusted raw text (`resolveDangerousInnerHtml`, #2207).
141
- // A dynamic/signal-derived value now lowers through Jinja's `| safe` filter
142
- // (#2319) — `dangerous-inner-html-dynamic` is no longer pinned and renders
143
- // to Hono parity, same as the static case.
144
- // #2273: a method call on a prop typed as a built-in host rich type
145
- // (Date, Map, …) has no catalogued lowering in any adapter — this is a
146
- // compiler-level refusal (`checkRichTypeMethodCalls`, wired ahead of
147
- // `adapter.generate()`), not an adapter-specific gap, so it is pinned
148
- // identically across every adapter package including Hono.
52
+ 'filter-nested-find-predicate': [{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2320' }],
53
+ // Top-level `.find`/`.findIndex`/`.findLast`/`.findLastIndex` are NOT
54
+ // pinned — unlike mojo (which refuses them), Jinja lowers them via the
55
+ // same evaluator-JSON mechanism as `.filter`/`.some`. Only the nested form
56
+ // above is refused.
149
57
  'date-method-uncatalogued': [{ code: 'BF021', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2356' }],
58
+ 'rich-prop-client-read': [{ code: 'BF049', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2648' }],
150
59
  }
@@ -1,23 +1,13 @@
1
1
  /**
2
- * Render-level divergences against the shared conformance corpus
3
- * (Priority-12 edge-case sweep, #2168): fixtures that COMPILE clean on
4
- * this adapter but whose rendered output diverges from the Hono
5
- * reference on real Python jinja2.
6
- *
7
- * Consumed by this package's conformance test (its `skipJsx` set is
8
- * derived from these keys, so the skip list and this declaration can't
9
- * drift) and by `packages/compat`, which publishes the entries in the
10
- * fixture-divergences section of `ui/compat.lock.json` — surfaced on
11
- * the docs compatibility-matrix page. Graduating an entry means fixing
12
- * the adapter (or the shared compiler layer) and deleting the line.
2
+ * Fixtures that compile clean on this adapter but render divergent from the
3
+ * Hono reference on real Python jinja2. The conformance `skipJsx` set and
4
+ * `packages/compat`'s published fixture-divergences both derive from this
5
+ * one object, so the skip list and the declaration can't drift. Keep the
6
+ * file even when the set is empty — the next divergence lands here, not in
7
+ * a re-created file.
13
8
  */
14
9
 
15
10
  import type { RenderDivergences } from '@barefootjs/jsx'
16
11
 
17
12
  export const renderDivergences: RenderDivergences = {
18
- // `todo-app` / `todo-app-ssr` no longer diverge (#2209) — the shared
19
- // `evaluateSignalInit` (`@barefootjs/jsx`, sandboxed real-JS evaluation
20
- // instead of a fixed regex-shape catalogue) now correctly seeds `todos`
21
- // from `(props.initialTodos ?? []).map(t => ({ ...t, editing: false }))`.
22
-
23
13
  }