@barefootjs/xslate 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.
- package/dist/adapter/index.js +2 -1
- package/dist/adapter/xslate-adapter.d.ts.map +1 -1
- package/dist/conformance-pins.d.ts +6 -5
- package/dist/conformance-pins.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/render-divergences.d.ts +6 -11
- package/dist/render-divergences.d.ts.map +1 -1
- package/dist/vite.js +6 -1
- package/lib/BarefootJS/Backend/Xslate.pm +1 -1
- package/package.json +5 -5
- package/src/adapter/xslate-adapter.ts +1 -0
- package/src/conformance-pins.ts +32 -137
- package/src/render-divergences.ts +6 -16
package/dist/adapter/index.js
CHANGED
|
@@ -188592,7 +188592,8 @@ ${whenTrue}
|
|
|
188592
188592
|
message: `Loop array \`${arrayName}\` is a local computed value (\`${arrayConst.value}\`) that the Xslate adapter cannot bind as a template variable — only numeric/string-literal locals inline at their use site.`,
|
|
188593
188593
|
loc: loop.loc ?? { file: this.componentName + ".tsx", start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
|
|
188594
188594
|
suggestion: {
|
|
188595
|
-
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."
|
|
188595
|
+
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.",
|
|
188596
|
+
escape: [{ kind: "prop-precompute" }, { kind: "client-directive" }]
|
|
188596
188597
|
}
|
|
188597
188598
|
});
|
|
188598
188599
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xslate-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/xslate-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"xslate-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/xslate-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Per-fixture build-time contracts for shapes
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `
|
|
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.
|
|
7
8
|
*/
|
|
8
9
|
import type { ConformancePins } from '@barefootjs/jsx';
|
|
9
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
|
|
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
|
@@ -188592,7 +188592,8 @@ ${whenTrue}
|
|
|
188592
188592
|
message: `Loop array \`${arrayName}\` is a local computed value (\`${arrayConst.value}\`) that the Xslate adapter cannot bind as a template variable — only numeric/string-literal locals inline at their use site.`,
|
|
188593
188593
|
loc: loop.loc ?? { file: this.componentName + ".tsx", start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
|
|
188594
188594
|
suggestion: {
|
|
188595
|
-
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."
|
|
188595
|
+
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.",
|
|
188596
|
+
escape: [{ kind: "prop-precompute" }, { kind: "client-directive" }]
|
|
188596
188597
|
}
|
|
188597
188598
|
});
|
|
188598
188599
|
}
|
|
@@ -189165,18 +189166,25 @@ var conformancePins = {
|
|
|
189165
189166
|
"tag-cloud": [{ code: "BF021", severity: "error" }],
|
|
189166
189167
|
"preamble-cells": [{ code: "BF021", severity: "error" }],
|
|
189167
189168
|
"static-array-from-props": [
|
|
189168
|
-
{
|
|
189169
|
+
{
|
|
189170
|
+
code: "BF101",
|
|
189171
|
+
severity: "error",
|
|
189172
|
+
issue: "https://github.com/piconic-ai/barefootjs/issues/2321"
|
|
189173
|
+
}
|
|
189169
189174
|
],
|
|
189170
189175
|
"static-array-from-props-with-component": [
|
|
189171
|
-
{
|
|
189176
|
+
{
|
|
189177
|
+
code: "BF101",
|
|
189178
|
+
severity: "error",
|
|
189179
|
+
issue: "https://github.com/piconic-ai/barefootjs/issues/2321"
|
|
189180
|
+
}
|
|
189172
189181
|
],
|
|
189173
189182
|
"filter-nested-callback-predicate": [
|
|
189174
189183
|
{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2320" }
|
|
189175
189184
|
],
|
|
189176
|
-
"filter-nested-find-predicate": [
|
|
189177
|
-
|
|
189178
|
-
]
|
|
189179
|
-
"date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2356" }]
|
|
189185
|
+
"filter-nested-find-predicate": [{ code: "BF101", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2320" }],
|
|
189186
|
+
"date-method-uncatalogued": [{ code: "BF021", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2356" }],
|
|
189187
|
+
"rich-prop-client-read": [{ code: "BF049", severity: "error", issue: "https://github.com/piconic-ai/barefootjs/issues/2648" }]
|
|
189180
189188
|
};
|
|
189181
189189
|
// src/render-divergences.ts
|
|
189182
189190
|
var renderDivergences = {};
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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 Text::Xslate. 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
|
|
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
|
@@ -2258,6 +2258,7 @@ var ErrorCodes = {
|
|
|
2258
2258
|
COMPONENT_REQUIRED_PROP_MISSING: "BF046",
|
|
2259
2259
|
JSX_BRANCH_LOCAL_IN_CALLBACK: "BF047",
|
|
2260
2260
|
SIBLING_COMPONENT_NOT_COMPILED: "BF048",
|
|
2261
|
+
RICH_TYPE_PROP_NOT_HYDRATABLE: "BF049",
|
|
2261
2262
|
SHARED_PROGRAM_REQUIRED: "BF050",
|
|
2262
2263
|
WRONG_PACKAGE_IMPORT: "BF051",
|
|
2263
2264
|
BUILTIN_REQUIRES_IMPORT: "BF054",
|
|
@@ -2288,6 +2289,7 @@ var errorMessages = {
|
|
|
2288
2289
|
[ErrorCodes.COMPONENT_REQUIRED_PROP_MISSING]: "Built-in component is missing a required prop.",
|
|
2289
2290
|
[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>`.",
|
|
2290
2291
|
[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.",
|
|
2292
|
+
[ErrorCodes.RICH_TYPE_PROP_NOT_HYDRATABLE]: "Rich-typed prop cannot cross the bf-p hydration boundary as JSON.",
|
|
2291
2293
|
[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.",
|
|
2292
2294
|
[ErrorCodes.WRONG_PACKAGE_IMPORT]: "Import from wrong package.",
|
|
2293
2295
|
[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.",
|
|
@@ -2321,6 +2323,8 @@ var HOST_RICH_TYPE_NAMES = new Set([
|
|
|
2321
2323
|
"BigInt",
|
|
2322
2324
|
"Function"
|
|
2323
2325
|
]);
|
|
2326
|
+
var JSON_REVIVABLE_RICH_TYPE_NAMES = new Set(["Date", "URL"]);
|
|
2327
|
+
var JSON_UNSAFE_RICH_TYPE_NAMES = new Set([...HOST_RICH_TYPE_NAMES].filter((n) => !JSON_REVIVABLE_RICH_TYPE_NAMES.has(n)));
|
|
2324
2328
|
function baseTypeName(raw) {
|
|
2325
2329
|
const idx = raw.indexOf("<");
|
|
2326
2330
|
return (idx === -1 ? raw : raw.slice(0, idx)).trim();
|
|
@@ -6362,7 +6366,8 @@ ${whenTrue}
|
|
|
6362
6366
|
message: `Loop array \`${arrayName}\` is a local computed value (\`${arrayConst.value}\`) that the Xslate adapter cannot bind as a template variable — only numeric/string-literal locals inline at their use site.`,
|
|
6363
6367
|
loc: loop.loc ?? { file: this.componentName + ".tsx", start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
|
|
6364
6368
|
suggestion: {
|
|
6365
|
-
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."
|
|
6369
|
+
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.",
|
|
6370
|
+
escape: [{ kind: "prop-precompute" }, { kind: "client-directive" }]
|
|
6366
6371
|
}
|
|
6367
6372
|
});
|
|
6368
6373
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barefootjs/xslate",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.7",
|
|
4
4
|
"description": "Text::Xslate (Kolon) adapter for BarefootJS — compiles IR to .tx templates and ships the Xslate rendering backend; runs under any PSGI/Plack app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"directory": "packages/adapter-xslate"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@barefootjs/shared": "0.31.
|
|
58
|
+
"@barefootjs/shared": "0.31.7"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"@barefootjs/jsx": ">=0.2.0",
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@barefootjs/adapter-tests": "0.1.0",
|
|
75
|
-
"@barefootjs/jsx": "0.31.
|
|
76
|
-
"@barefootjs/vite": "0.31.
|
|
77
|
-
"@barefootjs/client": "0.31.
|
|
75
|
+
"@barefootjs/jsx": "0.31.7",
|
|
76
|
+
"@barefootjs/vite": "0.31.7",
|
|
77
|
+
"@barefootjs/client": "0.31.7",
|
|
78
78
|
"typescript": "^5.0.0",
|
|
79
79
|
"vite": "^6.0.0"
|
|
80
80
|
}
|
|
@@ -821,6 +821,7 @@ export class XslateAdapter extends BaseAdapter implements IRNodeEmitter<XslateRe
|
|
|
821
821
|
suggestion: {
|
|
822
822
|
message:
|
|
823
823
|
'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.',
|
|
824
|
+
escape: [{ kind: 'prop-precompute' }, { kind: 'client-directive' }],
|
|
824
825
|
},
|
|
825
826
|
})
|
|
826
827
|
}
|
package/src/conformance-pins.ts
CHANGED
|
@@ -1,164 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Per-fixture build-time contracts for shapes
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `
|
|
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.
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
10
|
import type { ConformancePins } from '@barefootjs/jsx'
|
|
10
11
|
|
|
11
12
|
export const conformancePins: ConformancePins = {
|
|
12
|
-
// Off-subset filter predicate (`typeof`) the compiler can't lower; a
|
|
13
|
-
// JS-runtime target runs it, a DSL adapter surfaces BF021 + `/* @client */`.
|
|
14
|
-
// See spec/callback-fidelity.md.
|
|
15
13
|
'filter-typeof-predicate': [{ code: 'BF021', severity: 'error' }],
|
|
16
14
|
'map-array-builder-body': [{ code: 'BF021', severity: 'error' }],
|
|
17
15
|
'map-array-builder-escaping': [{ code: 'BF021', severity: 'error' }],
|
|
18
|
-
// `.fill(value)` mutates the receiver in place — no template lowering
|
|
19
|
-
// on any DSL adapter; a JS-runtime target runs it, a DSL adapter
|
|
20
|
-
// surfaces BF101 + `/* @client */`. See spec/callback-fidelity.md.
|
|
21
16
|
'fill-unsupported': [{ code: 'BF101', severity: 'error' }],
|
|
22
|
-
// Off-subset `.find()` / `.some()` / `.every()` predicate (`typeof`) the
|
|
23
|
-
// compiler can't lower; a JS-runtime target runs it, a DSL adapter
|
|
24
|
-
// surfaces BF101 + `/* @client */`. See spec/callback-fidelity.md.
|
|
25
17
|
'find-typeof-predicate': [{ code: 'BF101', severity: 'error' }],
|
|
26
18
|
'some-typeof-predicate': [{ code: 'BF101', severity: 'error' }],
|
|
27
19
|
'every-typeof-predicate': [{ code: 'BF101', severity: 'error' }],
|
|
28
|
-
// Off-subset `.reduce()` / `.reduceRight()` body / `.flatMap()`
|
|
29
|
-
// projection (`typeof`) the compiler can't lower; a JS-runtime target
|
|
30
|
-
// runs it, a DSL adapter surfaces BF101 + `/* @client */`.
|
|
31
|
-
// See spec/callback-fidelity.md.
|
|
32
20
|
'reduce-typeof-body': [{ code: 'BF101', severity: 'error' }],
|
|
33
21
|
'reduce-right-typeof-body': [{ code: 'BF101', severity: 'error' }],
|
|
34
22
|
'flatmap-typeof-projection': [{ code: 'BF101', severity: 'error' }],
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
// `/* @client */` (pre-gate this emitted an empty loop body — silent
|
|
39
|
-
// divergence). A pure PROJECTION body (`flatMap(it => it.tags.map(...))`,
|
|
40
|
-
// e.g. the `flatmap-expression-body` fixture) is NOT pinned: it lowers to
|
|
41
|
-
// neutral nested-loop IR this adapter templatizes natively.
|
|
42
|
-
// 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.
|
|
43
26
|
'tag-cloud': [{ code: 'BF021', severity: 'error' }],
|
|
44
|
-
// A keyed `.map()` row body whose preamble builds a JSX leaf from item
|
|
45
|
-
// state (`cells.push(<td>{stateLabel}</td>)`) embedded as `{cells}` — the
|
|
46
|
-
// Stage 3 array-builder carrier, jsRuntime-only: a JS runtime runs it
|
|
47
|
-
// verbatim (and patches the region on same-key updates, #2389), a DSL
|
|
48
|
-
// adapter refuses with BF021 + `/* @client */`. See spec/callback-fidelity.md.
|
|
49
27
|
'preamble-cells': [{ code: 'BF021', severity: 'error' }],
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
// BF103 loop-body cross-template check no longer fires spuriously. (Both
|
|
54
|
-
// fixtures are still skipped on this adapter via `render-divergences.ts`
|
|
55
|
-
// — #2209 — for an unrelated signal-seeding gap.)
|
|
56
|
-
// `static-array-children` no longer pinned (#2208) — `items`'s
|
|
57
|
-
// array-literal initializer is now recognized as fully-static
|
|
58
|
-
// (`resolveStaticLoopSource`) and inlined as a native Kolon array/hash
|
|
59
|
-
// literal in the `for EXPR -> $item` header, the same way a module-scope
|
|
60
|
-
// const's value is already seeded.
|
|
61
|
-
// `([emoji, users]) => ...` / `([id, t]) => ...` are plain array-index
|
|
62
|
-
// (tuple) destructures, no rest — #2087 Phase B's `segments`-walking
|
|
63
|
-
// accessor lowers both to `$__bf_item[0]` / `$__bf_item[1]` `: my` locals
|
|
64
|
-
// like any other fixed binding, so BF104 no longer fires for either
|
|
65
|
-
// fixture. Each now hits a DIFFERENT, pre-existing, orthogonal gap
|
|
66
|
-
// instead: the loop array (`entries`) is a function-scope local const
|
|
67
|
-
// with a computed initializer (`Object.entries(props.x ?? {}).filter(...)`)
|
|
68
|
-
// that the adapter can't bind as a template variable — see the dedicated
|
|
69
|
-
// `arrayConst` BF101 check in `renderLoop`. This was always true; it was
|
|
70
|
-
// simply unreachable before because BF104 refused the destructure shape
|
|
71
|
-
// first.
|
|
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 silently iterating an unbound name zero times.
|
|
72
31
|
'static-array-from-props': [
|
|
73
|
-
{
|
|
32
|
+
{
|
|
33
|
+
code: 'BF101',
|
|
34
|
+
severity: 'error',
|
|
35
|
+
issue: 'https://github.com/piconic-ai/barefootjs/issues/2321',
|
|
36
|
+
},
|
|
74
37
|
],
|
|
75
|
-
//
|
|
76
|
-
// (sibling-imported `<Tag>` child component in the loop body) no longer
|
|
77
|
-
// does either now that the conformance harness passes
|
|
78
|
-
// `siblingTemplatesRegistered: true` (#2205).
|
|
38
|
+
// No BF103 pin: the harness registers sibling templates (#2205).
|
|
79
39
|
'static-array-from-props-with-component': [
|
|
80
|
-
{
|
|
40
|
+
{
|
|
41
|
+
code: 'BF101',
|
|
42
|
+
severity: 'error',
|
|
43
|
+
issue: 'https://github.com/piconic-ai/barefootjs/issues/2321',
|
|
44
|
+
},
|
|
81
45
|
],
|
|
82
|
-
// #
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
// `$bf.omit($__bf_item, [...exclude keys...])`, `$rest.flag` reads the
|
|
86
|
-
// residual hashref.
|
|
87
|
-
// - object-rest spread onto the root element
|
|
88
|
-
// (`rest-destructure-object-spread-in-map`): same `$bf.omit(...)`
|
|
89
|
-
// residual, forwarded via the existing `$bf.spread_attrs($rest)` path.
|
|
90
|
-
// - array-rest (`rest-destructure-array-in-map`): `$bf.slice($__bf_item,
|
|
91
|
-
// N, nil)` — the same runtime helper `.slice()` JS-method calls use.
|
|
92
|
-
// - nested rest inside an object pattern (`rest-destructure-nested-in-map`):
|
|
93
|
-
// the parent-prefix accessor (`$__bf_item.cells`) feeds the same
|
|
94
|
-
// `$bf.slice(...)` call.
|
|
95
|
-
// None of these are pinned here anymore.
|
|
96
|
-
// (button/kbd graduated: the site/ui Button/Kbd `<Slot>` `{...props}` /
|
|
97
|
-
// `{...children.props}` component-spread now lowers via Kolon's builtin
|
|
98
|
-
// `.merge(...)` method chain — see `xslate-adapter.ts`'s
|
|
99
|
-
// `renderComponent` — instead of refusing with BF101, so these two no
|
|
100
|
-
// longer need a pin here.)
|
|
101
|
-
// #1467 demo-corpus context providers (`radio-group`, `select`,
|
|
102
|
-
// `dropdown-menu`, `combobox`, `command`) are no longer pinned — an
|
|
103
|
-
// object-literal provider value (`{ value: currentValue,
|
|
104
|
-
// onValueChange: (v) => {…} }`) lowers to a Kolon hashref via
|
|
105
|
-
// `parseProviderObjectLiteral` (#1897): getter members snapshot
|
|
106
|
-
// their body's SSR value, handler / function-shaped members lower
|
|
107
|
-
// to `nil`. The command demo's `ref={(el) => {…}}` function prop on
|
|
108
|
-
// an imported component is skipped at SSR like `on*` handlers.
|
|
109
|
-
//
|
|
110
|
-
// #1467 Phase 2e: `data-table` is no longer pinned here — it
|
|
111
|
-
// compiles clean now (`selected()[index]` → `index-access`,
|
|
112
|
-
// `.toFixed(2)` → `$bf.to_fixed`, `/* @client */` memo SSR-folded)
|
|
113
|
-
// and renders to Hono parity on real Text::Xslate. The keyed-loop
|
|
114
|
-
// scope-ID divergence (#1896) was fixed by the body-children
|
|
115
|
-
// `inLoop` reset (loop-item children get `_bf_slot`); data-table is
|
|
116
|
-
// off `skipJsx` entirely and only kept in `skipMarkerConformance`
|
|
117
|
-
// below for the shared `/* @client */` keyed-map slot-id elision
|
|
118
|
-
// contract (same as `todo-app`), not a render or BF101 gap.
|
|
119
|
-
// `style-3-signals` / `style-object-dynamic` no longer pinned — a
|
|
120
|
-
// `style={{ … }}` object literal now lowers to a CSS string with dynamic
|
|
121
|
-
// values interpolated (`background-color:<: $color :>;padding:8px`) via
|
|
122
|
-
// `tryLowerStyleObject` (#1322).
|
|
123
|
-
// (`tagged-template-classname` graduated by #2092 — the tag resolves
|
|
124
|
-
// through the interleave-tag catalogue and desugars to an untagged
|
|
125
|
-
// template literal, so it lowers like any other className template.)
|
|
126
|
-
// #2038: a filter predicate whose body contains a NESTED callback call
|
|
127
|
-
// (`t => !picked().some(p => …)` / `t => picked().find(p => …)`). Kolon
|
|
128
|
-
// has no inline `grep` form, so `XslateFilterEmitter.callbackMethod` used
|
|
129
|
-
// to degrade the inner call to its receiver, silently changing predicate
|
|
130
|
-
// semantics — the compiler is loud instead of lossy. (Mojo is pinned only
|
|
131
|
-
// for the `.find` variant: it lowers a nested `.some` to a real inline
|
|
132
|
-
// Perl `grep`.) The `/* @client */` twin
|
|
133
|
-
// (`filter-nested-callback-predicate-client`) has no pin here: it must
|
|
134
|
-
// render clean on every adapter, which asserts the suppression contract.
|
|
135
|
-
// Faithful lowering tracked: https://github.com/piconic-ai/barefootjs/issues/2320 (successor to #2038)
|
|
46
|
+
// #2038: Kolon has no inline `grep` form (unlike mojo, which lowers a
|
|
47
|
+
// nested `.some` to a real inline Perl `grep`) — loud BF101 instead of the
|
|
48
|
+
// old silent degradation to the receiver.
|
|
136
49
|
'filter-nested-callback-predicate': [
|
|
137
50
|
{ code: 'BF101', severity: 'error', issue: 'https://github.com/piconic-ai/barefootjs/issues/2320' },
|
|
138
51
|
],
|
|
139
|
-
'filter-nested-find-predicate': [
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
// Xslate lowers them to `$bf.find` / `find_index` / `find_last` /
|
|
145
|
-
// `find_last_index` via the same Kolon-lambda mechanism as `.filter` /
|
|
146
|
-
// `.every` / `.some`, so they render. Only the NESTED-in-a-predicate form
|
|
147
|
-
// above is refused (#2038).
|
|
148
|
-
// `array-map-function-reference` no longer pinned — a bare-identifier
|
|
149
|
-
// `.map(format)` callback now resolves one hop to its declaration
|
|
150
|
-
// (`resolveCallbackMethodFunctionReferences`, #2206), the same mechanism
|
|
151
|
-
// #2090 established for `.sort(fnref)`.
|
|
152
|
-
// `dangerous-inner-html` no longer pinned — a compile-time string-literal
|
|
153
|
-
// `dangerouslySetInnerHTML={{ __html: '...' }}` is spliced directly into
|
|
154
|
-
// the template as trusted raw text (`resolveDangerousInnerHtml`, #2207).
|
|
155
|
-
// A dynamic/signal-derived value now lowers through Kolon's `mark_raw`
|
|
156
|
-
// filter (#2319) — `dangerous-inner-html-dynamic` is no longer pinned and
|
|
157
|
-
// renders to Hono parity, same as the static case.
|
|
158
|
-
// #2273: a method call on a prop typed as a built-in host rich type
|
|
159
|
-
// (Date, Map, …) has no catalogued lowering in any adapter — this is a
|
|
160
|
-
// compiler-level refusal (`checkRichTypeMethodCalls`, wired ahead of
|
|
161
|
-
// `adapter.generate()`), not an adapter-specific gap, so it is pinned
|
|
162
|
-
// 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), Xslate lowers them via the
|
|
55
|
+
// same Kolon-lambda mechanism as `.filter`/`.some`. Only the nested form
|
|
56
|
+
// above is refused.
|
|
163
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' }],
|
|
164
59
|
}
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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 Text::Xslate. 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
|
}
|