@barefootjs/hono 0.1.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.
Files changed (81) hide show
  1. package/dist/adapter/hono-adapter.d.ts +141 -0
  2. package/dist/adapter/hono-adapter.d.ts.map +1 -0
  3. package/dist/adapter/index.d.ts +6 -0
  4. package/dist/adapter/index.d.ts.map +1 -0
  5. package/dist/adapter/index.js +632 -0
  6. package/dist/app.d.ts +131 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +139 -0
  9. package/dist/async.d.ts +15 -0
  10. package/dist/async.d.ts.map +1 -0
  11. package/dist/async.js +12 -0
  12. package/dist/build.d.ts +65 -0
  13. package/dist/build.d.ts.map +1 -0
  14. package/dist/build.js +785 -0
  15. package/dist/client-shim.d.ts +59 -0
  16. package/dist/client-shim.d.ts.map +1 -0
  17. package/dist/client-shim.js +90 -0
  18. package/dist/dev-worker.d.ts +25 -0
  19. package/dist/dev-worker.d.ts.map +1 -0
  20. package/dist/dev-worker.js +65 -0
  21. package/dist/dev.d.ts +36 -0
  22. package/dist/dev.d.ts.map +1 -0
  23. package/dist/dev.js +418 -0
  24. package/dist/dialog-context.d.ts +13 -0
  25. package/dist/dialog-context.d.ts.map +1 -0
  26. package/dist/dialog-context.js +10 -0
  27. package/dist/index.d.ts +13 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +632 -0
  30. package/dist/jsx/jsx-dev-runtime/index.d.ts +9 -0
  31. package/dist/jsx/jsx-dev-runtime/index.d.ts.map +1 -0
  32. package/dist/jsx/jsx-dev-runtime/index.js +6 -0
  33. package/dist/jsx/jsx-runtime/index.d.ts +32 -0
  34. package/dist/jsx/jsx-runtime/index.d.ts.map +1 -0
  35. package/dist/jsx/jsx-runtime/index.js +10 -0
  36. package/dist/portal-ssr.d.ts +22 -0
  37. package/dist/portal-ssr.d.ts.map +1 -0
  38. package/dist/portal-ssr.js +73 -0
  39. package/dist/portals.d.ts +26 -0
  40. package/dist/portals.d.ts.map +1 -0
  41. package/dist/portals.js +41 -0
  42. package/dist/preload.d.ts +56 -0
  43. package/dist/preload.d.ts.map +1 -0
  44. package/dist/preload.js +51 -0
  45. package/dist/scripts.d.ts +80 -0
  46. package/dist/scripts.d.ts.map +1 -0
  47. package/dist/scripts.js +198 -0
  48. package/dist/test-render.d.ts +28 -0
  49. package/dist/test-render.d.ts.map +1 -0
  50. package/dist/utils.d.ts +16 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +16 -0
  53. package/package.json +116 -0
  54. package/src/__tests__/async.test.tsx +106 -0
  55. package/src/__tests__/bfscripts-entry-roots.test.tsx +135 -0
  56. package/src/__tests__/build.test.ts +299 -0
  57. package/src/__tests__/dev.test.tsx +123 -0
  58. package/src/__tests__/hydration-props-type.test.ts +141 -0
  59. package/src/__tests__/manifest-scripts.test.ts +87 -0
  60. package/src/__tests__/scaffold.test.ts +209 -0
  61. package/src/__tests__/ssr-context-bridge.test.ts +110 -0
  62. package/src/__tests__/string-literal-css-var-prop.test.ts +84 -0
  63. package/src/__tests__/stub-deps-scripts.test.ts +183 -0
  64. package/src/adapter/hono-adapter.ts +1114 -0
  65. package/src/adapter/index.ts +6 -0
  66. package/src/app.ts +220 -0
  67. package/src/async.tsx +55 -0
  68. package/src/build.ts +230 -0
  69. package/src/client-shim.ts +164 -0
  70. package/src/dev-worker.ts +93 -0
  71. package/src/dev.tsx +146 -0
  72. package/src/dialog-context.tsx +44 -0
  73. package/src/index.ts +26 -0
  74. package/src/jsx/jsx-dev-runtime/index.ts +9 -0
  75. package/src/jsx/jsx-runtime/index.ts +40 -0
  76. package/src/portal-ssr.tsx +92 -0
  77. package/src/portals.tsx +98 -0
  78. package/src/preload.tsx +166 -0
  79. package/src/scripts.tsx +220 -0
  80. package/src/test-render.ts +143 -0
  81. package/src/utils.ts +26 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * BarefootJS Hono Adapter
3
+ *
4
+ * Generates Hono JSX from Pure IR.
5
+ */
6
+ import { type ComponentIR, type IRNode, type IRElement, type IRText, type IRExpression, type IRConditional, type IRLoop, type IRComponent, type IRFragment, type IRIfStatement, type IRProvider, type IRAsync, type IRSlot, type AdapterGenerateOptions, type AdapterOutput, type JsxAdapterConfig, type IRNodeEmitter, type EmitIRNode, JsxAdapter } from '@barefootjs/jsx';
7
+ /**
8
+ * Hono adapter's IRNode render context: which surrounding render
9
+ * state matters when lowering a node. The `IRNodeEmitter` dispatcher
10
+ * threads this `Ctx` unchanged into per-kind methods; per-method
11
+ * documentation below records which flags each kind consults.
12
+ */
13
+ type HonoRenderCtx = {
14
+ isRootOfClientComponent?: boolean;
15
+ isInsideLoop?: boolean;
16
+ isLoopItemRoot?: boolean;
17
+ };
18
+ export interface HonoAdapterOptions {
19
+ /**
20
+ * Base path for client JS files (e.g., '/static/components/')
21
+ * Used to generate script src attributes.
22
+ */
23
+ clientJsBasePath?: string;
24
+ /**
25
+ * Path to barefoot.js runtime (e.g., '/static/components/barefoot.js')
26
+ */
27
+ barefootJsPath?: string;
28
+ /**
29
+ * Client JS filename (without path). When set, all components use this filename.
30
+ * When not set, uses `{componentName}.client.js`.
31
+ * Useful for files with multiple components that share a single client JS file.
32
+ */
33
+ clientJsFilename?: string;
34
+ /**
35
+ * Display name surfaced through `JsxAdapter.name` — read by `bf build`
36
+ * for its `Adapter: …` banner. Defaults to `'hono'`. CSR-mode callers
37
+ * (`@barefootjs/client/build`) pass `'csr'` so the banner reflects the
38
+ * mode the user picked at scaffold time instead of leaking the
39
+ * fact that CSR currently reuses HonoAdapter under the hood.
40
+ */
41
+ name?: string;
42
+ }
43
+ export declare class HonoAdapter extends JsxAdapter implements IRNodeEmitter<HonoRenderCtx> {
44
+ name: string;
45
+ extension: string;
46
+ clientShimSource: string;
47
+ acceptsTemplateCall: () => boolean;
48
+ protected jsxConfig: JsxAdapterConfig;
49
+ private options;
50
+ private isClientComponent;
51
+ private hasClientInteractivity;
52
+ private currentComponentHasProps;
53
+ /**
54
+ * Per-call relative-import rewriter supplied by the build pipeline so
55
+ * source-authored relative paths resolve correctly from the emitted
56
+ * file's on-disk position (#1453). Stashed for the duration of one
57
+ * `generate()` call so `generateImports` can apply it; cleared on exit
58
+ * so a singleton adapter instance does not leak state between
59
+ * components.
60
+ */
61
+ private rewriteRelativeImport?;
62
+ /** Stack of loop keys for generating data-key / data-key-1 attributes on loop items */
63
+ private loopKeyStack;
64
+ constructor(options?: HonoAdapterOptions);
65
+ generate(ir: ComponentIR, options?: AdapterGenerateOptions): AdapterOutput;
66
+ private generateModuleLevelContextBindings;
67
+ private generateImports;
68
+ generateTypes(ir: ComponentIR, componentBody?: string): string | null;
69
+ private getPropsTypeName;
70
+ private generateComponent;
71
+ /**
72
+ * Public entry point for node rendering. Delegates to the shared
73
+ * `IRNodeEmitter` dispatcher (#1290 step 1); per-kind logic lives in
74
+ * the `IRNodeEmitter` methods below.
75
+ */
76
+ renderNode(node: IRNode, ctx?: HonoRenderCtx): string;
77
+ emitElement(node: IRElement, ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
78
+ emitText(node: IRText): string;
79
+ emitExpression(node: IRExpression): string;
80
+ emitConditional(node: IRConditional, _ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
81
+ emitLoop(node: IRLoop, _ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
82
+ emitComponent(node: IRComponent, ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
83
+ emitFragment(node: IRFragment, _ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
84
+ emitSlot(_node: IRSlot): string;
85
+ emitIfStatement(_node: IRIfStatement, _ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
86
+ emitProvider(node: IRProvider, _ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
87
+ emitAsync(node: IRAsync, _ctx: HonoRenderCtx, _emit: EmitIRNode<HonoRenderCtx>): string;
88
+ renderElement(element: IRElement, ctx?: {
89
+ isLoopItemRoot?: boolean;
90
+ }): string;
91
+ private renderText;
92
+ renderExpression(expr: IRExpression): string;
93
+ renderConditional(cond: IRConditional): string;
94
+ private wrapWithCondMarker;
95
+ renderLoop(loop: IRLoop): string;
96
+ private renderChildrenInLoop;
97
+ /**
98
+ * Render an if-statement chain as function-level code.
99
+ * This is used for components with early return patterns.
100
+ */
101
+ renderIfStatement(ifStmt: IRIfStatement, ctx?: {
102
+ isRootOfClientComponent?: boolean;
103
+ }): string;
104
+ renderAsync(node: IRAsync): string;
105
+ renderComponent(comp: IRComponent, ctx?: {
106
+ isRootOfClientComponent?: boolean;
107
+ isInsideLoop?: boolean;
108
+ isLoopItemRoot?: boolean;
109
+ }): string;
110
+ private renderFragment;
111
+ /**
112
+ * Wrap `body` in a fragment-rooted scope comment.
113
+ * Shape (matches `hydrate.ts::hydrateCommentScope`):
114
+ * root: <!--bf-scope:<scopeId>|<propsJson>-->
115
+ * child: <!--bf-scope:<scopeId>|h=<host>|m=<slot>|<propsJson>-->
116
+ * `<scopeId>` stays at the front so child detection can anchor on `|h=`.
117
+ */
118
+ private wrapWithScopeComment;
119
+ /**
120
+ * AttrValue lowering for intrinsic-element attributes (Hono JSX).
121
+ * Per-kind logic that used to live in a `switch (v.kind)` inside
122
+ * `renderAttributes`; routed through the shared dispatcher so a new
123
+ * AttrValue kind becomes a TS compile error here (#1290 step 2).
124
+ */
125
+ private readonly elementAttrEmitter;
126
+ /**
127
+ * AttrValue lowering for component-invocation props (Hono JSX).
128
+ * Component props differ from intrinsic attrs in several places —
129
+ * `jsx-children` is rendered as `<>…</>`, `expression` skips the
130
+ * boolean-attr fold, etc. Kept as a separate emitter so each method
131
+ * does one thing.
132
+ */
133
+ private readonly componentPropEmitter;
134
+ private renderAttributes;
135
+ private renderComponentProps;
136
+ private attrValueToJsExpr;
137
+ private renderTemplateLiteralParts;
138
+ }
139
+ export declare const honoAdapter: HonoAdapter;
140
+ export {};
141
+ //# sourceMappingURL=hono-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/hono-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * BarefootJS Hono Adapter
3
+ */
4
+ export { HonoAdapter, honoAdapter } from './hono-adapter';
5
+ export type { HonoAdapterOptions } from './hono-adapter';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA"}