@kubb/renderer-jsx 5.0.0-beta.75 → 5.0.0-beta.9
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/README.md +124 -0
- package/dist/index.cjs +15 -46
- package/dist/index.d.ts +8 -53
- package/dist/index.js +16 -46
- package/package.json +3 -9
- package/src/Renderer.ts +0 -4
- package/src/Runtime.tsx +2 -13
- package/src/createRenderer.tsx +14 -69
- package/src/dom.ts +1 -3
- package/src/index.ts +1 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jsx-dev-runtime.cjs.map +0 -1
- package/dist/jsx-dev-runtime.js.map +0 -1
- package/dist/jsx-runtime-Cvu_ZYgL.js.map +0 -1
- package/dist/jsx-runtime-DdmO3p0U.cjs.map +0 -1
- package/dist/jsx-runtime.cjs.map +0 -1
- package/dist/jsx-runtime.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<h1>@kubb/renderer-jsx</h1>
|
|
3
|
+
<a href="https://kubb.dev" target="_blank" rel="noopener noreferrer">
|
|
4
|
+
<img width="180" src="https://raw.githubusercontent.com/kubb-labs/kubb/main/assets/logo.png" alt="Kubb logo">
|
|
5
|
+
</a>
|
|
6
|
+
|
|
7
|
+
[![npm version][npm-version-src]][npm-version-href]
|
|
8
|
+
[![npm downloads][npm-downloads-src]][npm-downloads-href]
|
|
9
|
+
[![Coverage][coverage-src]][coverage-href]
|
|
10
|
+
[![License][license-src]][license-href]
|
|
11
|
+
[![Sponsors][sponsors-src]][sponsors-href]
|
|
12
|
+
|
|
13
|
+
<h4>
|
|
14
|
+
<a href="https://kubb.dev/" target="_blank">Documentation</a>
|
|
15
|
+
<span> · </span>
|
|
16
|
+
<a href="https://github.com/kubb-labs/kubb/issues/" target="_blank">Report Bug</a>
|
|
17
|
+
<span> · </span>
|
|
18
|
+
<a href="https://github.com/kubb-labs/kubb/issues/" target="_blank">Request Feature</a>
|
|
19
|
+
</h4>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
JSX-based renderer for Kubb. Provides a custom React runtime, reconciler, and built-in components (`File`, `Function`, `Type`, `Const`) for component-based, type-safe code generation inside Kubb plugins.
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bun add @kubb/renderer-jsx
|
|
28
|
+
# or
|
|
29
|
+
pnpm add @kubb/renderer-jsx
|
|
30
|
+
# or
|
|
31
|
+
npm install @kubb/renderer-jsx
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
Use the built-in components inside a Kubb plugin to emit generated files:
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
import { createRenderer } from '@kubb/renderer-jsx'
|
|
40
|
+
import { File, Function, Type } from '@kubb/renderer-jsx'
|
|
41
|
+
|
|
42
|
+
const renderer = createRenderer()
|
|
43
|
+
|
|
44
|
+
await renderer.render(
|
|
45
|
+
<File baseName="petStore.ts" path="src/gen/petStore.ts">
|
|
46
|
+
<File.Source>
|
|
47
|
+
<Type name="Pet">{'{ id: number; name: string }'}</Type>
|
|
48
|
+
<Function name="getPet" async>
|
|
49
|
+
{"return fetch('/pets')"}
|
|
50
|
+
</Function>
|
|
51
|
+
</File.Source>
|
|
52
|
+
</File>,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
const files = renderer.files
|
|
56
|
+
renderer.unmount()
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Built-in Components
|
|
60
|
+
|
|
61
|
+
| Component | Description |
|
|
62
|
+
| --------------- | --------------------------------------------------------------------------- |
|
|
63
|
+
| `<File>` | Declares a generated output file with its path and optional imports/exports |
|
|
64
|
+
| `<File.Source>` | The source content block inside a `<File>` |
|
|
65
|
+
| `<Function>` | Generates a TypeScript function declaration |
|
|
66
|
+
| `<Type>` | Generates a TypeScript type alias |
|
|
67
|
+
| `<Const>` | Generates a `const` variable declaration |
|
|
68
|
+
| `<Jsx>` | Renders JSX expressions inside generated output |
|
|
69
|
+
| `<Root>` | Root container for the renderer tree |
|
|
70
|
+
|
|
71
|
+
## API
|
|
72
|
+
|
|
73
|
+
### `createRenderer(options?)`
|
|
74
|
+
|
|
75
|
+
Creates a new renderer instance.
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
const renderer = createRenderer({ debug: false })
|
|
79
|
+
await renderer.render(<MyComponent />)
|
|
80
|
+
const files = renderer.files // FileNode[]
|
|
81
|
+
renderer.unmount()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### `jsxRenderer`
|
|
85
|
+
|
|
86
|
+
Pre-built renderer instance for use directly in Kubb plugins as the `jsxRenderer` plugin option.
|
|
87
|
+
|
|
88
|
+
## JSX Runtime
|
|
89
|
+
|
|
90
|
+
`@kubb/renderer-jsx` ships its own JSX runtime (`jsx-runtime` and `jsx-dev-runtime`). Configure your `tsconfig.json` to use it:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"compilerOptions": {
|
|
95
|
+
"jsx": "react-jsx",
|
|
96
|
+
"jsxImportSource": "@kubb/renderer-jsx"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Supporting Kubb
|
|
102
|
+
|
|
103
|
+
Kubb is an open source project with its ongoing development made possible entirely by the support of Sponsors. If you would like to become a sponsor, please consider:
|
|
104
|
+
|
|
105
|
+
- [Become a Sponsor on GitHub](https://github.com/sponsors/stijnvanhulle)
|
|
106
|
+
|
|
107
|
+
<p align="center">
|
|
108
|
+
<a href="https://github.com/sponsors/stijnvanhulle">
|
|
109
|
+
<img src="https://raw.githubusercontent.com/stijnvanhulle/sponsors/main/sponsors.svg" alt="My sponsors" />
|
|
110
|
+
</a>
|
|
111
|
+
</p>
|
|
112
|
+
|
|
113
|
+
<!-- Badges -->
|
|
114
|
+
|
|
115
|
+
[npm-version-src]: https://img.shields.io/npm/v/@kubb/renderer-jsx?flat&colorA=18181B&colorB=f58517
|
|
116
|
+
[npm-version-href]: https://npmjs.com/package/@kubb/renderer-jsx
|
|
117
|
+
[npm-downloads-src]: https://img.shields.io/npm/dm/@kubb/renderer-jsx?flat&colorA=18181B&colorB=f58517
|
|
118
|
+
[npm-downloads-href]: https://npmjs.com/package/@kubb/renderer-jsx
|
|
119
|
+
[license-src]: https://img.shields.io/github/license/kubb-labs/kubb.svg?flat&colorA=18181B&colorB=f58517
|
|
120
|
+
[license-href]: https://github.com/kubb-labs/kubb/blob/main/LICENSE
|
|
121
|
+
[coverage-src]: https://img.shields.io/codecov/c/github/kubb-labs/kubb?style=flat&colorA=18181B&colorB=f58517
|
|
122
|
+
[coverage-href]: https://www.npmjs.com/package/@kubb/renderer-jsx
|
|
123
|
+
[sponsors-src]: https://img.shields.io/github/sponsors/stijnvanhulle?style=flat&colorA=18181B&colorB=f58517
|
|
124
|
+
[sponsors-href]: https://github.com/sponsors/stijnvanhulle/
|
package/dist/index.cjs
CHANGED
|
@@ -18078,7 +18078,7 @@ var Runtime = class {
|
|
|
18078
18078
|
nodes = [];
|
|
18079
18079
|
#container;
|
|
18080
18080
|
#rootNode;
|
|
18081
|
-
constructor(options) {
|
|
18081
|
+
constructor(options = {}) {
|
|
18082
18082
|
this.#options = options;
|
|
18083
18083
|
this.#rootNode = createNode("kubb-root");
|
|
18084
18084
|
this.#rootNode.onRender = this.onRender;
|
|
@@ -18149,53 +18149,10 @@ var Runtime = class {
|
|
|
18149
18149
|
}
|
|
18150
18150
|
this.resolveExitPromise();
|
|
18151
18151
|
}
|
|
18152
|
-
async waitUntilExit() {
|
|
18153
|
-
if (!this.exitPromise) this.exitPromise = new Promise((resolve, reject) => {
|
|
18154
|
-
this.resolveExitPromise = resolve;
|
|
18155
|
-
this.rejectExitPromise = reject;
|
|
18156
|
-
});
|
|
18157
|
-
return this.exitPromise;
|
|
18158
|
-
}
|
|
18159
18152
|
};
|
|
18160
18153
|
//#endregion
|
|
18161
18154
|
//#region src/createRenderer.tsx
|
|
18162
18155
|
/**
|
|
18163
|
-
* Create a Kubb JSX renderer.
|
|
18164
|
-
*
|
|
18165
|
-
* The renderer converts a React JSX element tree — built from the components in this
|
|
18166
|
-
* package — into an array of {@link FileNode} entries representing the generated files.
|
|
18167
|
-
*
|
|
18168
|
-
* @example Basic usage
|
|
18169
|
-
* ```ts
|
|
18170
|
-
* import { createRenderer, File } from '@kubb/renderer-jsx'
|
|
18171
|
-
*
|
|
18172
|
-
* const renderer = createRenderer()
|
|
18173
|
-
* await renderer.render(
|
|
18174
|
-
* <File baseName="pet.ts" path="src/models/pet.ts">
|
|
18175
|
-
* <File.Source name="Pet" isExportable isIndexable>
|
|
18176
|
-
* {`export type Pet = { id: number; name: string }`}
|
|
18177
|
-
* </File.Source>
|
|
18178
|
-
* </File>
|
|
18179
|
-
* )
|
|
18180
|
-
* console.log(renderer.files) // [FileNode]
|
|
18181
|
-
* renderer.unmount()
|
|
18182
|
-
* ```
|
|
18183
|
-
*/
|
|
18184
|
-
function createRenderer(options = {}) {
|
|
18185
|
-
const runtime = new Runtime(options);
|
|
18186
|
-
return {
|
|
18187
|
-
async render(Element) {
|
|
18188
|
-
await runtime.render(Element);
|
|
18189
|
-
},
|
|
18190
|
-
get files() {
|
|
18191
|
-
return runtime.nodes;
|
|
18192
|
-
},
|
|
18193
|
-
unmount(error) {
|
|
18194
|
-
runtime.unmount(error);
|
|
18195
|
-
}
|
|
18196
|
-
};
|
|
18197
|
-
}
|
|
18198
|
-
/**
|
|
18199
18156
|
* A renderer factory for generators that produce JSX output.
|
|
18200
18157
|
*
|
|
18201
18158
|
* Pass this as the `renderer` property of a `defineGenerator` call so that
|
|
@@ -18216,7 +18173,20 @@ function createRenderer(options = {}) {
|
|
|
18216
18173
|
* })
|
|
18217
18174
|
* ```
|
|
18218
18175
|
*/
|
|
18219
|
-
const jsxRenderer = () =>
|
|
18176
|
+
const jsxRenderer = () => {
|
|
18177
|
+
const runtime = new Runtime();
|
|
18178
|
+
return {
|
|
18179
|
+
async render(element) {
|
|
18180
|
+
await runtime.render(element);
|
|
18181
|
+
},
|
|
18182
|
+
get files() {
|
|
18183
|
+
return runtime.nodes;
|
|
18184
|
+
},
|
|
18185
|
+
unmount(error) {
|
|
18186
|
+
runtime.unmount(error);
|
|
18187
|
+
}
|
|
18188
|
+
};
|
|
18189
|
+
};
|
|
18220
18190
|
//#endregion
|
|
18221
18191
|
exports.Const = Const;
|
|
18222
18192
|
exports.File = File;
|
|
@@ -18225,7 +18195,6 @@ exports.Jsx = Jsx;
|
|
|
18225
18195
|
exports.Root = Root;
|
|
18226
18196
|
exports.Type = Type;
|
|
18227
18197
|
exports.createContext = createContext;
|
|
18228
|
-
exports.createRenderer = createRenderer;
|
|
18229
18198
|
exports.inject = inject;
|
|
18230
18199
|
exports.jsxRenderer = jsxRenderer;
|
|
18231
18200
|
exports.provide = provide;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { n as __name } from "./chunk-Bb7HlUDG.js";
|
|
2
2
|
import { a as JSDoc, h as KubbReactNode, m as KubbReactElement, o as Key } from "./types-nAFMiWFw.js";
|
|
3
|
-
import
|
|
3
|
+
import * as _$_kubb_ast0 from "@kubb/ast";
|
|
4
|
+
import { ExportNode, ImportNode, SourceNode } from "@kubb/ast";
|
|
4
5
|
import * as _$react from "react";
|
|
5
6
|
|
|
6
7
|
//#region ../../internals/utils/src/context.d.ts
|
|
@@ -519,56 +520,6 @@ declare namespace Type {
|
|
|
519
520
|
}
|
|
520
521
|
//#endregion
|
|
521
522
|
//#region src/createRenderer.d.ts
|
|
522
|
-
type Options = {
|
|
523
|
-
/**
|
|
524
|
-
* Print each render result to the console for debugging.
|
|
525
|
-
* Useful when diagnosing output differences between renders.
|
|
526
|
-
* @default false
|
|
527
|
-
*/
|
|
528
|
-
debug?: boolean;
|
|
529
|
-
};
|
|
530
|
-
/**
|
|
531
|
-
* The renderer instance returned by {@link createRenderer}.
|
|
532
|
-
*/
|
|
533
|
-
type Renderer = {
|
|
534
|
-
/**
|
|
535
|
-
* Render a JSX element tree and collect the resulting {@link FileNode} entries.
|
|
536
|
-
* Resolves once all synchronous render work (including React's flush) is done.
|
|
537
|
-
*/
|
|
538
|
-
render(Element: KubbReactElement): Promise<void>;
|
|
539
|
-
/**
|
|
540
|
-
* Tear down the renderer and release all React resources.
|
|
541
|
-
* Pass an `Error` to signal an abnormal shutdown.
|
|
542
|
-
*/
|
|
543
|
-
unmount(error?: Error | number | null): void;
|
|
544
|
-
/**
|
|
545
|
-
* The {@link FileNode} entries collected from the most recent `render` call.
|
|
546
|
-
*/
|
|
547
|
-
files: Array<FileNode>;
|
|
548
|
-
};
|
|
549
|
-
/**
|
|
550
|
-
* Create a Kubb JSX renderer.
|
|
551
|
-
*
|
|
552
|
-
* The renderer converts a React JSX element tree — built from the components in this
|
|
553
|
-
* package — into an array of {@link FileNode} entries representing the generated files.
|
|
554
|
-
*
|
|
555
|
-
* @example Basic usage
|
|
556
|
-
* ```ts
|
|
557
|
-
* import { createRenderer, File } from '@kubb/renderer-jsx'
|
|
558
|
-
*
|
|
559
|
-
* const renderer = createRenderer()
|
|
560
|
-
* await renderer.render(
|
|
561
|
-
* <File baseName="pet.ts" path="src/models/pet.ts">
|
|
562
|
-
* <File.Source name="Pet" isExportable isIndexable>
|
|
563
|
-
* {`export type Pet = { id: number; name: string }`}
|
|
564
|
-
* </File.Source>
|
|
565
|
-
* </File>
|
|
566
|
-
* )
|
|
567
|
-
* console.log(renderer.files) // [FileNode]
|
|
568
|
-
* renderer.unmount()
|
|
569
|
-
* ```
|
|
570
|
-
*/
|
|
571
|
-
declare function createRenderer(options?: Options): Renderer;
|
|
572
523
|
/**
|
|
573
524
|
* A renderer factory for generators that produce JSX output.
|
|
574
525
|
*
|
|
@@ -590,7 +541,11 @@ declare function createRenderer(options?: Options): Renderer;
|
|
|
590
541
|
* })
|
|
591
542
|
* ```
|
|
592
543
|
*/
|
|
593
|
-
declare const jsxRenderer: () =>
|
|
544
|
+
declare const jsxRenderer: () => {
|
|
545
|
+
render(element: KubbReactElement): Promise<void>;
|
|
546
|
+
readonly files: _$_kubb_ast0.FileNode[];
|
|
547
|
+
unmount(error?: Error | number | null): void;
|
|
548
|
+
};
|
|
594
549
|
//#endregion
|
|
595
|
-
export { Const, File, Function, Jsx, Root, Type, createContext,
|
|
550
|
+
export { Const, File, Function, Jsx, Root, Type, createContext, inject, jsxRenderer, provide, unprovide };
|
|
596
551
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -18075,7 +18075,7 @@ var Runtime = class {
|
|
|
18075
18075
|
nodes = [];
|
|
18076
18076
|
#container;
|
|
18077
18077
|
#rootNode;
|
|
18078
|
-
constructor(options) {
|
|
18078
|
+
constructor(options = {}) {
|
|
18079
18079
|
this.#options = options;
|
|
18080
18080
|
this.#rootNode = createNode("kubb-root");
|
|
18081
18081
|
this.#rootNode.onRender = this.onRender;
|
|
@@ -18146,53 +18146,10 @@ var Runtime = class {
|
|
|
18146
18146
|
}
|
|
18147
18147
|
this.resolveExitPromise();
|
|
18148
18148
|
}
|
|
18149
|
-
async waitUntilExit() {
|
|
18150
|
-
if (!this.exitPromise) this.exitPromise = new Promise((resolve, reject) => {
|
|
18151
|
-
this.resolveExitPromise = resolve;
|
|
18152
|
-
this.rejectExitPromise = reject;
|
|
18153
|
-
});
|
|
18154
|
-
return this.exitPromise;
|
|
18155
|
-
}
|
|
18156
18149
|
};
|
|
18157
18150
|
//#endregion
|
|
18158
18151
|
//#region src/createRenderer.tsx
|
|
18159
18152
|
/**
|
|
18160
|
-
* Create a Kubb JSX renderer.
|
|
18161
|
-
*
|
|
18162
|
-
* The renderer converts a React JSX element tree — built from the components in this
|
|
18163
|
-
* package — into an array of {@link FileNode} entries representing the generated files.
|
|
18164
|
-
*
|
|
18165
|
-
* @example Basic usage
|
|
18166
|
-
* ```ts
|
|
18167
|
-
* import { createRenderer, File } from '@kubb/renderer-jsx'
|
|
18168
|
-
*
|
|
18169
|
-
* const renderer = createRenderer()
|
|
18170
|
-
* await renderer.render(
|
|
18171
|
-
* <File baseName="pet.ts" path="src/models/pet.ts">
|
|
18172
|
-
* <File.Source name="Pet" isExportable isIndexable>
|
|
18173
|
-
* {`export type Pet = { id: number; name: string }`}
|
|
18174
|
-
* </File.Source>
|
|
18175
|
-
* </File>
|
|
18176
|
-
* )
|
|
18177
|
-
* console.log(renderer.files) // [FileNode]
|
|
18178
|
-
* renderer.unmount()
|
|
18179
|
-
* ```
|
|
18180
|
-
*/
|
|
18181
|
-
function createRenderer(options = {}) {
|
|
18182
|
-
const runtime = new Runtime(options);
|
|
18183
|
-
return {
|
|
18184
|
-
async render(Element) {
|
|
18185
|
-
await runtime.render(Element);
|
|
18186
|
-
},
|
|
18187
|
-
get files() {
|
|
18188
|
-
return runtime.nodes;
|
|
18189
|
-
},
|
|
18190
|
-
unmount(error) {
|
|
18191
|
-
runtime.unmount(error);
|
|
18192
|
-
}
|
|
18193
|
-
};
|
|
18194
|
-
}
|
|
18195
|
-
/**
|
|
18196
18153
|
* A renderer factory for generators that produce JSX output.
|
|
18197
18154
|
*
|
|
18198
18155
|
* Pass this as the `renderer` property of a `defineGenerator` call so that
|
|
@@ -18213,8 +18170,21 @@ function createRenderer(options = {}) {
|
|
|
18213
18170
|
* })
|
|
18214
18171
|
* ```
|
|
18215
18172
|
*/
|
|
18216
|
-
const jsxRenderer = () =>
|
|
18173
|
+
const jsxRenderer = () => {
|
|
18174
|
+
const runtime = new Runtime();
|
|
18175
|
+
return {
|
|
18176
|
+
async render(element) {
|
|
18177
|
+
await runtime.render(element);
|
|
18178
|
+
},
|
|
18179
|
+
get files() {
|
|
18180
|
+
return runtime.nodes;
|
|
18181
|
+
},
|
|
18182
|
+
unmount(error) {
|
|
18183
|
+
runtime.unmount(error);
|
|
18184
|
+
}
|
|
18185
|
+
};
|
|
18186
|
+
};
|
|
18217
18187
|
//#endregion
|
|
18218
|
-
export { Const, File, Function$1 as Function, Jsx, Root, Type, createContext,
|
|
18188
|
+
export { Const, File, Function$1 as Function, Jsx, Root, Type, createContext, inject, jsxRenderer, provide, unprovide };
|
|
18219
18189
|
|
|
18220
18190
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/renderer-jsx",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "5.0.0-beta.9",
|
|
4
|
+
"description": "JSX-based renderer for Kubb. Provides a custom React runtime, reconciler, and built-in components (File, Function, Type, Const) for component-based, type-safe code generation.",
|
|
5
5
|
"keywords": [
|
|
6
|
-
"code-generator",
|
|
7
6
|
"codegen",
|
|
8
|
-
"component-generation",
|
|
9
|
-
"file-generation",
|
|
10
7
|
"jsx",
|
|
11
8
|
"jsx-runtime",
|
|
12
9
|
"kubb",
|
|
13
|
-
"plugin-system",
|
|
14
|
-
"plugins",
|
|
15
10
|
"react",
|
|
16
|
-
"react-reconciler",
|
|
17
11
|
"typescript"
|
|
18
12
|
],
|
|
19
13
|
"license": "MIT",
|
|
@@ -81,7 +75,7 @@
|
|
|
81
75
|
"registry": "https://registry.npmjs.org/"
|
|
82
76
|
},
|
|
83
77
|
"dependencies": {
|
|
84
|
-
"@kubb/ast": "5.0.0-beta.
|
|
78
|
+
"@kubb/ast": "5.0.0-beta.9"
|
|
85
79
|
},
|
|
86
80
|
"devDependencies": {
|
|
87
81
|
"@types/react": "^19.2.14",
|
package/src/Renderer.ts
CHANGED
|
@@ -155,9 +155,7 @@ export const Renderer = Reconciler({
|
|
|
155
155
|
maySuspendCommit() {
|
|
156
156
|
return false
|
|
157
157
|
},
|
|
158
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
159
158
|
NotPendingTransition: undefined,
|
|
160
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
161
159
|
HostTransitionContext: createContext(null) as unknown as ReactContext<unknown>,
|
|
162
160
|
resetFormInstance() {},
|
|
163
161
|
requestPostPaintCallback() {},
|
|
@@ -180,5 +178,3 @@ export const Renderer = Reconciler({
|
|
|
180
178
|
return null
|
|
181
179
|
},
|
|
182
180
|
})
|
|
183
|
-
|
|
184
|
-
export type { FiberRoot } from 'react-reconciler'
|
package/src/Runtime.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import type { FileNode } from '@kubb/ast'
|
|
|
3
3
|
import { ConcurrentRoot } from 'react-reconciler/constants.js'
|
|
4
4
|
import { Root } from './components/Root.tsx'
|
|
5
5
|
import { createNode } from './dom.ts'
|
|
6
|
-
import type { FiberRoot } from '
|
|
6
|
+
import type { FiberRoot } from 'react-reconciler'
|
|
7
7
|
import { Renderer } from './Renderer.ts'
|
|
8
8
|
import type { DOMElement, KubbReactElement } from './types.ts'
|
|
9
9
|
import { processFiles } from './utils.ts'
|
|
@@ -26,7 +26,7 @@ export class Runtime {
|
|
|
26
26
|
readonly #container: FiberRoot
|
|
27
27
|
readonly #rootNode: DOMElement
|
|
28
28
|
|
|
29
|
-
constructor(options: Options) {
|
|
29
|
+
constructor(options: Options = {}) {
|
|
30
30
|
this.#options = options
|
|
31
31
|
this.#rootNode = createNode('kubb-root')
|
|
32
32
|
this.#rootNode.onRender = this.onRender
|
|
@@ -156,15 +156,4 @@ export class Runtime {
|
|
|
156
156
|
|
|
157
157
|
this.resolveExitPromise()
|
|
158
158
|
}
|
|
159
|
-
|
|
160
|
-
async waitUntilExit(): Promise<void> {
|
|
161
|
-
if (!this.exitPromise) {
|
|
162
|
-
this.exitPromise = new Promise((resolve, reject) => {
|
|
163
|
-
this.resolveExitPromise = resolve
|
|
164
|
-
this.rejectExitPromise = reject
|
|
165
|
-
})
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
return this.exitPromise
|
|
169
|
-
}
|
|
170
159
|
}
|
package/src/createRenderer.tsx
CHANGED
|
@@ -1,74 +1,6 @@
|
|
|
1
|
-
import type { FileNode } from '@kubb/ast'
|
|
2
1
|
import { Runtime } from './Runtime.tsx'
|
|
3
2
|
import type { KubbReactElement } from './types.ts'
|
|
4
3
|
|
|
5
|
-
type Options = {
|
|
6
|
-
/**
|
|
7
|
-
* Print each render result to the console for debugging.
|
|
8
|
-
* Useful when diagnosing output differences between renders.
|
|
9
|
-
* @default false
|
|
10
|
-
*/
|
|
11
|
-
debug?: boolean
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* The renderer instance returned by {@link createRenderer}.
|
|
16
|
-
*/
|
|
17
|
-
type Renderer = {
|
|
18
|
-
/**
|
|
19
|
-
* Render a JSX element tree and collect the resulting {@link FileNode} entries.
|
|
20
|
-
* Resolves once all synchronous render work (including React's flush) is done.
|
|
21
|
-
*/
|
|
22
|
-
render(Element: KubbReactElement): Promise<void>
|
|
23
|
-
/**
|
|
24
|
-
* Tear down the renderer and release all React resources.
|
|
25
|
-
* Pass an `Error` to signal an abnormal shutdown.
|
|
26
|
-
*/
|
|
27
|
-
unmount(error?: Error | number | null): void
|
|
28
|
-
/**
|
|
29
|
-
* The {@link FileNode} entries collected from the most recent `render` call.
|
|
30
|
-
*/
|
|
31
|
-
files: Array<FileNode>
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Create a Kubb JSX renderer.
|
|
36
|
-
*
|
|
37
|
-
* The renderer converts a React JSX element tree — built from the components in this
|
|
38
|
-
* package — into an array of {@link FileNode} entries representing the generated files.
|
|
39
|
-
*
|
|
40
|
-
* @example Basic usage
|
|
41
|
-
* ```ts
|
|
42
|
-
* import { createRenderer, File } from '@kubb/renderer-jsx'
|
|
43
|
-
*
|
|
44
|
-
* const renderer = createRenderer()
|
|
45
|
-
* await renderer.render(
|
|
46
|
-
* <File baseName="pet.ts" path="src/models/pet.ts">
|
|
47
|
-
* <File.Source name="Pet" isExportable isIndexable>
|
|
48
|
-
* {`export type Pet = { id: number; name: string }`}
|
|
49
|
-
* </File.Source>
|
|
50
|
-
* </File>
|
|
51
|
-
* )
|
|
52
|
-
* console.log(renderer.files) // [FileNode]
|
|
53
|
-
* renderer.unmount()
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
export function createRenderer(options: Options = {}): Renderer {
|
|
57
|
-
const runtime = new Runtime(options)
|
|
58
|
-
|
|
59
|
-
return {
|
|
60
|
-
async render(Element) {
|
|
61
|
-
await runtime.render(Element)
|
|
62
|
-
},
|
|
63
|
-
get files() {
|
|
64
|
-
return runtime.nodes
|
|
65
|
-
},
|
|
66
|
-
unmount(error) {
|
|
67
|
-
runtime.unmount(error)
|
|
68
|
-
},
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
4
|
/**
|
|
73
5
|
* A renderer factory for generators that produce JSX output.
|
|
74
6
|
*
|
|
@@ -90,4 +22,17 @@ export function createRenderer(options: Options = {}): Renderer {
|
|
|
90
22
|
* })
|
|
91
23
|
* ```
|
|
92
24
|
*/
|
|
93
|
-
export const jsxRenderer
|
|
25
|
+
export const jsxRenderer = () => {
|
|
26
|
+
const runtime = new Runtime()
|
|
27
|
+
return {
|
|
28
|
+
async render(element: KubbReactElement) {
|
|
29
|
+
await runtime.render(element)
|
|
30
|
+
},
|
|
31
|
+
get files() {
|
|
32
|
+
return runtime.nodes
|
|
33
|
+
},
|
|
34
|
+
unmount(error?: Error | number | null) {
|
|
35
|
+
runtime.unmount(error)
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/dom.ts
CHANGED
|
@@ -6,14 +6,12 @@ import type { DOMElement, DOMNode, DOMNodeAttribute, TextNode } from './types.ts
|
|
|
6
6
|
* The element has no attributes, no children, and no parent.
|
|
7
7
|
*/
|
|
8
8
|
export const createNode = (nodeName: string): DOMElement => {
|
|
9
|
-
|
|
9
|
+
return {
|
|
10
10
|
nodeName: nodeName as DOMElement['nodeName'],
|
|
11
11
|
attributes: new Map(),
|
|
12
12
|
childNodes: [],
|
|
13
13
|
parentNode: undefined,
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
return node
|
|
17
15
|
}
|
|
18
16
|
|
|
19
17
|
/**
|
package/src/index.ts
CHANGED
|
@@ -5,4 +5,4 @@ export { Function } from './components/Function.tsx'
|
|
|
5
5
|
export { Jsx } from './components/Jsx.tsx'
|
|
6
6
|
export { Root } from './components/Root.tsx'
|
|
7
7
|
export { Type } from './components/Type.tsx'
|
|
8
|
-
export {
|
|
8
|
+
export { jsxRenderer } from './createRenderer.tsx'
|