@barefootjs/hono 0.15.2 → 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/hono-adapter.d.ts.map +1 -1
- package/dist/adapter/index.js +3 -1
- package/dist/build.js +3 -1
- package/dist/client-shim.d.ts +2 -2
- package/dist/client-shim.d.ts.map +1 -1
- package/dist/client-shim.js +4 -2
- package/dist/index.js +3 -1
- package/package.json +1 -1
- package/src/__tests__/request-env.test.tsx +2 -1
- package/src/adapter/hono-adapter.ts +13 -1
- package/src/client-shim.ts +12 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hono-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/hono-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,MAAM,EAIX,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAElB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,EAEf,UAAU,EAMX,MAAM,iBAAiB,CAAA;AAExB;;;;;GAKG;AACH,KAAK,aAAa,GAAG;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAGD,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAuBD,qBAAa,WAAY,SAAQ,UAAW,YAAW,aAAa,CAAC,aAAa,CAAC;IACjF,IAAI,SAAS;IACb,SAAS,SAAS;IAClB,gBAAgB,SAAiC;IAGjD,kBAAkB,EAAG,WAAW,CAAS;IAmBzC,mBAAmB,QAAO,OAAO,CAAQ;IAEzC,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAA0B;IAE/D,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,sBAAsB,CAAiB;IAC/C,OAAO,CAAC,wBAAwB,CAAiB;IACjD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB,CAAC,CAAgC;IAC9D,uFAAuF;IACvF,OAAO,CAAC,YAAY,CAAmD;IAEvE,YAAY,OAAO,GAAE,kBAAuB,EAQ3C;IAED,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,aAAa,CAyCzE;IAED,OAAO,CAAC,kCAAkC;IAkB1C,OAAO,CAAC,eAAe;IAgEvB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+EpE;IAED,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"hono-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/hono-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter/index.js
CHANGED
|
@@ -192,7 +192,7 @@ export default ${this.componentName}` : "";
|
|
|
192
192
|
generateComponent(ir) {
|
|
193
193
|
const name = ir.metadata.componentName;
|
|
194
194
|
const propsTypeName = this.getPropsTypeName(ir);
|
|
195
|
-
const hasReactivePrimitives = ir.metadata.signals.
|
|
195
|
+
const hasReactivePrimitives = ir.metadata.signals.some((s) => !s.envReader) || ir.metadata.memos.length > 0 || ir.metadata.effects.length > 0 || ir.metadata.onMounts.length > 0;
|
|
196
196
|
if (hasReactivePrimitives && !ir.metadata.isClientComponent) {
|
|
197
197
|
throw new Error(`Component "${name}" has reactive primitives (signals, memos, effects, or onMounts) ` + `but is not marked as a client component. Add "use client" directive at the top of the file.`);
|
|
198
198
|
}
|
|
@@ -598,6 +598,8 @@ export default ${this.componentName}` : "";
|
|
|
598
598
|
renderAttributes(element) {
|
|
599
599
|
const parts = [];
|
|
600
600
|
for (const attr of element.attrs) {
|
|
601
|
+
if (attr.clientOnly)
|
|
602
|
+
continue;
|
|
601
603
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attr.name);
|
|
602
604
|
if (lowered)
|
|
603
605
|
parts.push(lowered);
|
package/dist/build.js
CHANGED
|
@@ -192,7 +192,7 @@ export default ${this.componentName}` : "";
|
|
|
192
192
|
generateComponent(ir) {
|
|
193
193
|
const name = ir.metadata.componentName;
|
|
194
194
|
const propsTypeName = this.getPropsTypeName(ir);
|
|
195
|
-
const hasReactivePrimitives = ir.metadata.signals.
|
|
195
|
+
const hasReactivePrimitives = ir.metadata.signals.some((s) => !s.envReader) || ir.metadata.memos.length > 0 || ir.metadata.effects.length > 0 || ir.metadata.onMounts.length > 0;
|
|
196
196
|
if (hasReactivePrimitives && !ir.metadata.isClientComponent) {
|
|
197
197
|
throw new Error(`Component "${name}" has reactive primitives (signals, memos, effects, or onMounts) ` + `but is not marked as a client component. Add "use client" directive at the top of the file.`);
|
|
198
198
|
}
|
|
@@ -598,6 +598,8 @@ export default ${this.componentName}` : "";
|
|
|
598
598
|
renderAttributes(element) {
|
|
599
599
|
const parts = [];
|
|
600
600
|
for (const attr of element.attrs) {
|
|
601
|
+
if (attr.clientOnly)
|
|
602
|
+
continue;
|
|
601
603
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attr.name);
|
|
602
604
|
if (lowered)
|
|
603
605
|
parts.push(lowered);
|
package/dist/client-shim.d.ts
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { Context as HonoContext } from 'hono/jsx';
|
|
18
18
|
import type { Context } from '@barefootjs/client';
|
|
19
|
-
export { createContext, splitProps, forwardProps, unwrap, __slot,
|
|
20
|
-
export type { Context, Reactive, Signal, Memo, CleanupFn, EffectFn, SlotMarker, Portal, PortalChildren, PortalOptions, Renderable, } from '@barefootjs/client';
|
|
19
|
+
export { createContext, splitProps, forwardProps, unwrap, __slot, createSearchParams, queryHref, } from '@barefootjs/client';
|
|
20
|
+
export type { Context, Reactive, Signal, Memo, CleanupFn, EffectFn, SlotMarker, Portal, PortalChildren, PortalOptions, Renderable, QueryParams, QueryParamValue, } from '@barefootjs/client';
|
|
21
21
|
/**
|
|
22
22
|
* Lazily map a BarefootJS Context object to a Hono context. The mapping is
|
|
23
23
|
* stable (WeakMap keyed by the Context object itself), so providers and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-shim.d.ts","sourceRoot":"","sources":["../src/client-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,MAAM,EACN,MAAM,EAMN,
|
|
1
|
+
{"version":3,"file":"client-shim.d.ts","sourceRoot":"","sources":["../src/client-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,MAAM,EACN,MAAM,EAMN,kBAAkB,EAIlB,SAAS,GACV,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EACV,OAAO,EACP,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,MAAM,EACN,cAAc,EACd,aAAa,EACb,UAAU,EACV,WAAW,EACX,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAQ3B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAO/E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAKlD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EACjB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,OAAO,GAChB,OAAO,CAGT;AAYD,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,CAEnD;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAEjD;AACD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,KAAK,CAEnD;AACD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,KAAK,CAE7D;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAEpE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,CAE7C;AACD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,IAAI,CAE/C;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEzC;AACD,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEvC;AAMD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,OAAO,EAClB,UAAU,CAAC,EAAE,OAAO,EACpB,QAAQ,CAAC,EAAE,OAAO,GACjB,KAAK,CAEP;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEhE"}
|
package/dist/client-shim.js
CHANGED
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
forwardProps,
|
|
7
7
|
unwrap,
|
|
8
8
|
__slot,
|
|
9
|
-
|
|
9
|
+
createSearchParams,
|
|
10
|
+
queryHref
|
|
10
11
|
} from "@barefootjs/client";
|
|
11
12
|
var honoCtxBridge = new WeakMap;
|
|
12
13
|
function getHonoContext(bfCtx) {
|
|
@@ -70,7 +71,7 @@ export {
|
|
|
70
71
|
unwrap,
|
|
71
72
|
untrack,
|
|
72
73
|
splitProps,
|
|
73
|
-
|
|
74
|
+
queryHref,
|
|
74
75
|
provideContextSSR,
|
|
75
76
|
provideContext,
|
|
76
77
|
onMount,
|
|
@@ -80,6 +81,7 @@ export {
|
|
|
80
81
|
forwardProps,
|
|
81
82
|
findSiblingSlot,
|
|
82
83
|
createSignal,
|
|
84
|
+
createSearchParams,
|
|
83
85
|
createRoot,
|
|
84
86
|
createPortal,
|
|
85
87
|
createMemo,
|
package/dist/index.js
CHANGED
|
@@ -192,7 +192,7 @@ export default ${this.componentName}` : "";
|
|
|
192
192
|
generateComponent(ir) {
|
|
193
193
|
const name = ir.metadata.componentName;
|
|
194
194
|
const propsTypeName = this.getPropsTypeName(ir);
|
|
195
|
-
const hasReactivePrimitives = ir.metadata.signals.
|
|
195
|
+
const hasReactivePrimitives = ir.metadata.signals.some((s) => !s.envReader) || ir.metadata.memos.length > 0 || ir.metadata.effects.length > 0 || ir.metadata.onMounts.length > 0;
|
|
196
196
|
if (hasReactivePrimitives && !ir.metadata.isClientComponent) {
|
|
197
197
|
throw new Error(`Component "${name}" has reactive primitives (signals, memos, effects, or onMounts) ` + `but is not marked as a client component. Add "use client" directive at the top of the file.`);
|
|
198
198
|
}
|
|
@@ -598,6 +598,8 @@ export default ${this.componentName}` : "";
|
|
|
598
598
|
renderAttributes(element) {
|
|
599
599
|
const parts = [];
|
|
600
600
|
for (const attr of element.attrs) {
|
|
601
|
+
if (attr.clientOnly)
|
|
602
|
+
continue;
|
|
601
603
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attr.name);
|
|
602
604
|
if (lowered)
|
|
603
605
|
parts.push(lowered);
|
package/package.json
CHANGED
|
@@ -12,13 +12,14 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { describe, test, expect, beforeAll } from 'bun:test'
|
|
15
|
-
import {
|
|
15
|
+
import { createSearchParams } from '@barefootjs/client'
|
|
16
16
|
import { renderToHtml } from '../render'
|
|
17
17
|
import { runWithRequestEnv, withRequestEnv } from '../request-env'
|
|
18
18
|
|
|
19
19
|
// A plain hono/jsx component that reads the env signal at SSR — exactly what a
|
|
20
20
|
// compiled BarefootJS component lowers `{searchParams().get('sort') ?? 'none'}`
|
|
21
21
|
// to on the Hono adapter.
|
|
22
|
+
const [searchParams] = createSearchParams()
|
|
22
23
|
const SortLabel = () => <p>{searchParams().get('sort') ?? 'none'}</p>
|
|
23
24
|
|
|
24
25
|
// Install a prior keyed reader on the seam BEFORE the first `runWithRequestEnv`
|
|
@@ -376,8 +376,12 @@ export class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderC
|
|
|
376
376
|
const propsTypeName = this.getPropsTypeName(ir)
|
|
377
377
|
|
|
378
378
|
// Validate: only reactive primitives (signals, memos, effects, onMounts) require "use client"
|
|
379
|
+
// Env signals (`createSearchParams()`, #2057) are exempt — reading the
|
|
380
|
+
// request query is SSR-safe and needs no hydration, so a component that only
|
|
381
|
+
// reads an env signal stays a plain SSR component (as `searchParams()` did
|
|
382
|
+
// before it became a structural signal).
|
|
379
383
|
const hasReactivePrimitives =
|
|
380
|
-
ir.metadata.signals.
|
|
384
|
+
ir.metadata.signals.some(s => !s.envReader) ||
|
|
381
385
|
ir.metadata.memos.length > 0 ||
|
|
382
386
|
ir.metadata.effects.length > 0 ||
|
|
383
387
|
ir.metadata.onMounts.length > 0
|
|
@@ -1120,6 +1124,14 @@ export class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderC
|
|
|
1120
1124
|
const parts: string[] = []
|
|
1121
1125
|
|
|
1122
1126
|
for (const attr of element.attrs) {
|
|
1127
|
+
// `/* @client */` attribute bindings are deferred to hydrate: the
|
|
1128
|
+
// client runtime sets/patches the attribute in a mount effect (the
|
|
1129
|
+
// CSR template omits it; ir-to-client-js emits the setAttribute
|
|
1130
|
+
// effect). Skip SSR emission so the server omits the attribute,
|
|
1131
|
+
// matching the client-deferred shape and avoiding a hydration
|
|
1132
|
+
// mismatch where the server renders an attribute the client would
|
|
1133
|
+
// re-derive on mount. #1966
|
|
1134
|
+
if (attr.clientOnly) continue
|
|
1123
1135
|
const lowered = emitAttrValue(attr.value, this.elementAttrEmitter, attr.name)
|
|
1124
1136
|
if (lowered) parts.push(lowered)
|
|
1125
1137
|
}
|
package/src/client-shim.ts
CHANGED
|
@@ -27,12 +27,16 @@ export {
|
|
|
27
27
|
forwardProps,
|
|
28
28
|
unwrap,
|
|
29
29
|
__slot,
|
|
30
|
-
// Request-scoped env signal (router v0.5). Unlike the reactive
|
|
31
|
-
// below, `
|
|
32
|
-
// reads the per-request query via the injected reader
|
|
33
|
-
// it in `search-params-ssr.ts`), defaulting to an empty
|
|
34
|
-
// export is re-exported, not a throwing stub.
|
|
35
|
-
|
|
30
|
+
// Request-scoped env signal factory (router v0.5). Unlike the reactive
|
|
31
|
+
// primitives below, `createSearchParams()`'s getter is meant to resolve during
|
|
32
|
+
// SSR — on the server it reads the per-request query via the injected reader
|
|
33
|
+
// (the Hono adapter wires it in `search-params-ssr.ts`), defaulting to an empty
|
|
34
|
+
// query — so the real export is re-exported, not a throwing stub.
|
|
35
|
+
createSearchParams,
|
|
36
|
+
// Pure URL-query builder (#2042) — like the other pure helpers above, it has
|
|
37
|
+
// no reactivity and runs unchanged during SSR, so the real export is
|
|
38
|
+
// re-exported (not a stub).
|
|
39
|
+
queryHref,
|
|
36
40
|
} from '@barefootjs/client'
|
|
37
41
|
|
|
38
42
|
export type {
|
|
@@ -47,6 +51,8 @@ export type {
|
|
|
47
51
|
PortalChildren,
|
|
48
52
|
PortalOptions,
|
|
49
53
|
Renderable,
|
|
54
|
+
QueryParams,
|
|
55
|
+
QueryParamValue,
|
|
50
56
|
} from '@barefootjs/client'
|
|
51
57
|
|
|
52
58
|
// ---------------------------------------------------------------------------
|