@kubb/react-fabric 0.2.16 → 0.2.18
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/{Fabric-C3xWWIb6.d.ts → Fabric-7g9iQC3E.d.ts} +12 -7
- package/dist/{Fabric-MsFHiZXy.d.cts → Fabric-DX0joaWR.d.cts} +12 -7
- package/dist/globals.d.cts +2 -2
- package/dist/globals.d.ts +2 -2
- package/dist/index.cjs +10 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/jsx-dev-runtime.d.cts +3 -3
- package/dist/jsx-dev-runtime.d.ts +3 -3
- package/dist/{jsx-namespace-laCWw619.d.cts → jsx-namespace-BrIMxQyM.d.cts} +2 -2
- package/dist/{jsx-namespace-Cz6OfCDG.d.ts → jsx-namespace-ChOBBWsr.d.ts} +2 -2
- package/dist/jsx-runtime.d.cts +3 -3
- package/dist/jsx-runtime.d.ts +3 -3
- package/dist/parsers.d.cts +1 -1
- package/dist/parsers.d.ts +1 -1
- package/dist/plugins.cjs +1 -1
- package/dist/plugins.d.cts +8 -2
- package/dist/plugins.d.ts +8 -2
- package/dist/plugins.js +1 -1
- package/dist/{reactPlugin-BmBx9cO3.js → reactPlugin-BKFEDZfC.js} +53 -39
- package/dist/reactPlugin-BKFEDZfC.js.map +1 -0
- package/dist/{reactPlugin-DY-MH4LN.d.ts → reactPlugin-CNdpw8pN.d.ts} +6 -6
- package/dist/{reactPlugin-Dj5m_pqf.cjs → reactPlugin-CiFqRD0J.cjs} +53 -39
- package/dist/reactPlugin-CiFqRD0J.cjs.map +1 -0
- package/dist/{reactPlugin-D8rqKtK0.d.cts → reactPlugin-DvAUyVTQ.d.cts} +6 -6
- package/dist/{types-CJRSKjOD.d.ts → types-CGgYj2pZ.d.ts} +2 -2
- package/dist/{types-g8BNi4jj.d.cts → types-Xd33VuKS.d.cts} +2 -2
- package/dist/types.d.cts +2 -2
- package/dist/types.d.ts +2 -2
- package/package.json +2 -2
- package/src/Runtime.tsx +37 -21
- package/src/createReactFabric.ts +9 -4
- package/src/plugins/reactPlugin.ts +5 -5
- package/src/utils/processFiles.ts +30 -27
- package/dist/reactPlugin-BmBx9cO3.js.map +0 -1
- package/dist/reactPlugin-Dj5m_pqf.cjs.map +0 -1
package/dist/types.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as KubbFile_d_exports, a as FabricOptions, i as FabricMode, n as FabricConfig, r as FabricContext } from "./Fabric-
|
|
2
|
-
import { _ as Param, a as JSDoc, c as KubbExportProps, d as KubbNode, f as KubbSourceProps, h as TextNode, i as ElementNames, l as KubbFileProps, m as LineBreakProps, n as DOMNode, o as Key, p as KubbTextProps, r as DOMNodeAttribute, s as KubbElement, t as DOMElement, u as KubbImportProps, v as Params } from "./types-
|
|
1
|
+
import { _ as KubbFile_d_exports, a as FabricOptions, i as FabricMode, n as FabricConfig, r as FabricContext } from "./Fabric-DX0joaWR.cjs";
|
|
2
|
+
import { _ as Param, a as JSDoc, c as KubbExportProps, d as KubbNode, f as KubbSourceProps, h as TextNode, i as ElementNames, l as KubbFileProps, m as LineBreakProps, n as DOMNode, o as Key, p as KubbTextProps, r as DOMNodeAttribute, s as KubbElement, t as DOMElement, u as KubbImportProps, v as Params } from "./types-Xd33VuKS.cjs";
|
|
3
3
|
export { DOMElement, DOMNode, DOMNodeAttribute, ElementNames, FabricConfig, FabricContext, FabricMode, FabricOptions, JSDoc, Key, KubbElement, KubbExportProps, KubbFile_d_exports as KubbFile, KubbFileProps, KubbImportProps, KubbNode, KubbSourceProps, KubbTextProps, LineBreakProps, Param, Params, TextNode };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as KubbFile_d_exports, a as FabricOptions, i as FabricMode, n as FabricConfig, r as FabricContext } from "./Fabric-
|
|
2
|
-
import { _ as Param, a as JSDoc, c as KubbExportProps, d as KubbNode, f as KubbSourceProps, h as TextNode, i as ElementNames, l as KubbFileProps, m as LineBreakProps, n as DOMNode, o as Key, p as KubbTextProps, r as DOMNodeAttribute, s as KubbElement, t as DOMElement, u as KubbImportProps, v as Params } from "./types-
|
|
1
|
+
import { _ as KubbFile_d_exports, a as FabricOptions, i as FabricMode, n as FabricConfig, r as FabricContext } from "./Fabric-7g9iQC3E.js";
|
|
2
|
+
import { _ as Param, a as JSDoc, c as KubbExportProps, d as KubbNode, f as KubbSourceProps, h as TextNode, i as ElementNames, l as KubbFileProps, m as LineBreakProps, n as DOMNode, o as Key, p as KubbTextProps, r as DOMNodeAttribute, s as KubbElement, t as DOMElement, u as KubbImportProps, v as Params } from "./types-CGgYj2pZ.js";
|
|
3
3
|
export { DOMElement, DOMNode, DOMNodeAttribute, ElementNames, FabricConfig, FabricContext, FabricMode, FabricOptions, JSDoc, Key, KubbElement, KubbExportProps, KubbFile_d_exports as KubbFile, KubbFileProps, KubbImportProps, KubbNode, KubbSourceProps, KubbTextProps, LineBreakProps, Param, Params, TextNode };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/react-fabric",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.18",
|
|
4
4
|
"description": "React integration for Kubb, providing JSX runtime support and React component generation capabilities for code generation plugins.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"react-reconciler": "0.32.0",
|
|
114
114
|
"signal-exit": "^4.1.0",
|
|
115
115
|
"ws": "8.18.0",
|
|
116
|
-
"@kubb/fabric-core": "0.2.
|
|
116
|
+
"@kubb/fabric-core": "0.2.18"
|
|
117
117
|
},
|
|
118
118
|
"devDependencies": {
|
|
119
119
|
"@types/react": "^19.2.2",
|
package/src/Runtime.tsx
CHANGED
|
@@ -118,35 +118,48 @@ export class Runtime {
|
|
|
118
118
|
return this.#options.fileManager
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
#renderPromise: Promise<void> = Promise.resolve()
|
|
121
122
|
resolveExitPromise: () => void = () => {}
|
|
122
123
|
rejectExitPromise: (reason?: Error) => void = () => {}
|
|
123
124
|
unsubscribeExit: () => void = () => {}
|
|
124
|
-
onRender: () => void =
|
|
125
|
-
|
|
126
|
-
return
|
|
127
|
-
}
|
|
125
|
+
onRender: () => Promise<void> = () => {
|
|
126
|
+
const previous = this.#renderPromise
|
|
128
127
|
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
const task = previous
|
|
129
|
+
.catch(() => {})
|
|
130
|
+
.then(async () => {
|
|
131
|
+
if (this.#isUnmounted) {
|
|
132
|
+
return
|
|
133
|
+
}
|
|
131
134
|
|
|
132
|
-
|
|
135
|
+
const files = await processFiles(this.#rootNode)
|
|
133
136
|
|
|
134
|
-
|
|
135
|
-
return
|
|
136
|
-
}
|
|
137
|
+
await this.fileManager.add(...files)
|
|
137
138
|
|
|
138
|
-
|
|
139
|
+
if (!this.#options?.debug && !this.#options?.stdout) {
|
|
140
|
+
return
|
|
141
|
+
}
|
|
139
142
|
|
|
140
|
-
|
|
141
|
-
console.log('Rendering: \n')
|
|
142
|
-
console.log(output)
|
|
143
|
-
}
|
|
143
|
+
const output = await this.#getOutput(this.#rootNode)
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
145
|
+
if (this.#options?.debug) {
|
|
146
|
+
console.log('Rendering: \n')
|
|
147
|
+
console.log(output)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (this.#options?.stdout && process.env.NODE_ENV !== 'test') {
|
|
151
|
+
this.#options.stdout.clearLine(0)
|
|
152
|
+
this.#options.stdout.cursorTo(0)
|
|
153
|
+
this.#options.stdout.write(output)
|
|
154
|
+
}
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
this.#renderPromise = task.catch((error) => {
|
|
158
|
+
this.onError(error as Error)
|
|
159
|
+
throw error
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
return this.#renderPromise
|
|
150
163
|
}
|
|
151
164
|
onError(error: Error): void {
|
|
152
165
|
if (process.env.NODE_ENV === 'test') {
|
|
@@ -171,7 +184,7 @@ export class Runtime {
|
|
|
171
184
|
: text
|
|
172
185
|
}
|
|
173
186
|
|
|
174
|
-
render(node: ReactNode): void {
|
|
187
|
+
async render(node: ReactNode): Promise<void> {
|
|
175
188
|
const element = (
|
|
176
189
|
<Root onExit={this.onExit.bind(this)} onError={this.onError.bind(this)}>
|
|
177
190
|
{node}
|
|
@@ -180,6 +193,7 @@ export class Runtime {
|
|
|
180
193
|
|
|
181
194
|
Renderer.updateContainerSync(element, this.#container, null, null)
|
|
182
195
|
Renderer.flushSyncWork()
|
|
196
|
+
await this.#renderPromise
|
|
183
197
|
}
|
|
184
198
|
|
|
185
199
|
async renderToString(node: ReactNode): Promise<string> {
|
|
@@ -192,6 +206,8 @@ export class Runtime {
|
|
|
192
206
|
Renderer.updateContainerSync(element, this.#container, null, null)
|
|
193
207
|
Renderer.flushSyncWork()
|
|
194
208
|
|
|
209
|
+
await this.#renderPromise
|
|
210
|
+
|
|
195
211
|
this.fileManager.clear()
|
|
196
212
|
|
|
197
213
|
return this.#getOutput(this.#rootNode)
|
package/src/createReactFabric.ts
CHANGED
|
@@ -6,15 +6,20 @@ import type { Options } from './plugins/reactPlugin.ts'
|
|
|
6
6
|
import { reactPlugin } from './plugins/reactPlugin.ts'
|
|
7
7
|
|
|
8
8
|
export function createReactFabric(
|
|
9
|
-
config
|
|
9
|
+
config: FabricConfig<Options & { mode?: FabricMode; devtools?: boolean }> = {},
|
|
10
10
|
): Fabric<Options & { mode?: FabricMode; devtools?: boolean }> {
|
|
11
|
-
const fabric = createFabric(config)
|
|
11
|
+
const fabric = createFabric({ mode: config.mode })
|
|
12
12
|
|
|
13
|
-
if (config
|
|
13
|
+
if (config.devtools) {
|
|
14
14
|
open()
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
fabric.use(reactPlugin,
|
|
17
|
+
fabric.use(reactPlugin, {
|
|
18
|
+
stdout: config.stdout,
|
|
19
|
+
stderr: config.stderr,
|
|
20
|
+
debug: config.debug,
|
|
21
|
+
stdin: config.stdin,
|
|
22
|
+
})
|
|
18
23
|
|
|
19
24
|
return fabric
|
|
20
25
|
}
|
|
@@ -13,16 +13,16 @@ export type Options = {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
type ExtendOptions = {
|
|
16
|
-
render(App: ElementType): Promise<void>
|
|
17
|
-
renderToString(App: ElementType): Promise<string>
|
|
16
|
+
render(App: ElementType): Promise<void>
|
|
17
|
+
renderToString(App: ElementType): Promise<string>
|
|
18
18
|
waitUntilExit(): Promise<void>
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
declare global {
|
|
22
22
|
namespace Kubb {
|
|
23
23
|
interface Fabric {
|
|
24
|
-
render(App: ElementType): Promise<void>
|
|
25
|
-
renderToString(App: ElementType): Promise<string>
|
|
24
|
+
render(App: ElementType): Promise<void>
|
|
25
|
+
renderToString(App: ElementType): Promise<string>
|
|
26
26
|
waitUntilExit(): Promise<void>
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -36,7 +36,7 @@ export const reactPlugin = createPlugin<Options, ExtendOptions>({
|
|
|
36
36
|
|
|
37
37
|
return {
|
|
38
38
|
async render(App) {
|
|
39
|
-
runtime.render(createElement(App))
|
|
39
|
+
await runtime.render(createElement(App))
|
|
40
40
|
await ctx.emit('start')
|
|
41
41
|
},
|
|
42
42
|
async renderToString(App) {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { FileManager } from '@kubb/fabric-core'
|
|
2
1
|
import type { KubbFile } from '@kubb/fabric-core/types'
|
|
3
2
|
import type React from 'react'
|
|
4
3
|
import type { File } from '../components/File.tsx'
|
|
@@ -8,37 +7,41 @@ import { squashExportNodes } from './squashExportNodes.ts'
|
|
|
8
7
|
import { squashImportNodes } from './squashImportNodes.ts'
|
|
9
8
|
import { squashSourceNodes } from './squashSourceNodes.ts'
|
|
10
9
|
|
|
11
|
-
export function processFiles(node: DOMElement
|
|
12
|
-
|
|
13
|
-
const childNode = node.childNodes[index]
|
|
10
|
+
export async function processFiles(node: DOMElement): Promise<Array<KubbFile.File>> {
|
|
11
|
+
const collected: Array<KubbFile.File> = []
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
async function walk(current: DOMElement) {
|
|
14
|
+
for (const childNode of current.childNodes) {
|
|
15
|
+
if (!childNode) {
|
|
16
|
+
continue
|
|
17
|
+
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
if (childNode.nodeName !== '#text' && childNode.nodeName !== 'kubb-file' && nodeNames.includes(childNode.nodeName)) {
|
|
20
|
+
await walk(childNode)
|
|
21
|
+
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (attributes.baseName && attributes.path) {
|
|
27
|
-
const sources = squashSourceNodes(childNode, ['kubb-export', 'kubb-import'])
|
|
28
|
-
|
|
29
|
-
const file: KubbFile.File = {
|
|
30
|
-
baseName: attributes.baseName,
|
|
31
|
-
path: attributes.path,
|
|
32
|
-
sources: [...sources],
|
|
33
|
-
exports: [...squashExportNodes(childNode)],
|
|
34
|
-
imports: [...squashImportNodes(childNode)],
|
|
35
|
-
meta: attributes.meta || {},
|
|
36
|
-
footer: attributes.footer,
|
|
37
|
-
banner: attributes.banner,
|
|
38
|
-
}
|
|
23
|
+
if (childNode.nodeName === 'kubb-file') {
|
|
24
|
+
const attributes = childNode.attributes as React.ComponentProps<typeof File>
|
|
39
25
|
|
|
40
|
-
|
|
26
|
+
if (attributes.baseName && attributes.path) {
|
|
27
|
+
const sources = squashSourceNodes(childNode, ['kubb-export', 'kubb-import'])
|
|
28
|
+
|
|
29
|
+
collected.push({
|
|
30
|
+
baseName: attributes.baseName,
|
|
31
|
+
path: attributes.path,
|
|
32
|
+
sources: [...sources],
|
|
33
|
+
exports: [...squashExportNodes(childNode)],
|
|
34
|
+
imports: [...squashImportNodes(childNode)],
|
|
35
|
+
meta: attributes.meta || {},
|
|
36
|
+
footer: attributes.footer,
|
|
37
|
+
banner: attributes.banner,
|
|
38
|
+
})
|
|
39
|
+
}
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
42
|
}
|
|
43
|
+
|
|
44
|
+
await walk(node)
|
|
45
|
+
|
|
46
|
+
return collected
|
|
44
47
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactPlugin-BmBx9cO3.js","names":["onExit","node: TextNode","nodeNames: Array<ElementNames>","text","file: KubbFile.File"],"sources":["../src/components/Root.tsx","../src/dom.ts","../src/Renderer.ts","../src/utils/squashExportNodes.ts","../src/utils/squashImportNodes.ts","../src/utils/squashTextNodes.ts","../src/utils/squashSourceNodes.ts","../src/utils/processFiles.ts","../src/Runtime.tsx","../src/plugins/reactPlugin.ts"],"sourcesContent":["import { Component, createContext } from 'react'\n\nimport type { KubbNode } from '../types.ts'\n\ntype ErrorBoundaryProps = {\n onError: (error: Error) => void\n children?: KubbNode\n}\n\nclass ErrorBoundary extends Component<{\n onError: ErrorBoundaryProps['onError']\n children?: KubbNode\n}> {\n state = { hasError: false }\n\n static displayName = 'KubbErrorBoundary'\n static getDerivedStateFromError(_error: Error) {\n return { hasError: true }\n }\n\n componentDidCatch(error: Error) {\n if (error) {\n this.props.onError(error)\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null\n }\n return this.props.children\n }\n}\n\nexport type RootContextProps = {\n /**\n * Exit (unmount) the whole Ink app.\n */\n readonly exit: (error?: Error) => void\n}\n\nexport const RootContext = createContext<RootContextProps>({\n exit: () => {},\n})\n\ntype RootProps = {\n /**\n * Exit (unmount) hook\n */\n readonly onExit: (error?: Error) => void\n /**\n * Error hook\n */\n readonly onError: (error: Error) => void\n readonly children?: KubbNode\n}\n\nexport function Root({ onError, onExit, children }: RootProps) {\n try {\n return (\n <ErrorBoundary\n onError={(error) => {\n onError(error)\n }}\n >\n <RootContext.Provider value={{ exit: onExit }}>{children}</RootContext.Provider>\n </ErrorBoundary>\n )\n } catch (_e) {\n return null\n }\n}\n\nRoot.Context = RootContext\nRoot.displayName = 'KubbRoot'\n","import type { DOMElement, DOMNode, DOMNodeAttribute, ElementNames, TextNode } from './types.ts'\n\nexport const createNode = (nodeName: string): DOMElement => {\n const node: DOMElement = {\n nodeName: nodeName as DOMElement['nodeName'],\n attributes: {},\n childNodes: [],\n parentNode: undefined,\n }\n\n return node\n}\n\nexport const appendChildNode = (node: DOMNode, childNode: DOMElement | DOMNode): void => {\n if (childNode.parentNode) {\n removeChildNode(childNode.parentNode, childNode)\n }\n\n if (node.nodeName !== '#text') {\n childNode.parentNode = node\n node.childNodes.push(childNode)\n }\n}\n\nexport const insertBeforeNode = (node: DOMElement, newChildNode: DOMNode, beforeChildNode: DOMNode): void => {\n if (newChildNode.parentNode) {\n removeChildNode(newChildNode.parentNode, newChildNode)\n }\n\n newChildNode.parentNode = node\n\n const index = node.childNodes.indexOf(beforeChildNode)\n if (index >= 0) {\n node.childNodes.splice(index, 0, newChildNode)\n\n return\n }\n\n node.childNodes.push(newChildNode)\n}\n\nexport const removeChildNode = (node: DOMElement, removeNode: DOMNode): void => {\n removeNode.parentNode = undefined\n\n const index = node.childNodes.indexOf(removeNode)\n if (index >= 0) {\n node.childNodes.splice(index, 1)\n }\n}\n\nexport const setAttribute = (node: DOMElement, key: string, value: DOMNodeAttribute): void => {\n node.attributes[key] = value\n}\n\nexport const createTextNode = (text: string): TextNode => {\n const node: TextNode = {\n nodeName: '#text',\n nodeValue: text,\n parentNode: undefined,\n }\n\n setTextNodeValue(node, text)\n\n return node\n}\n\nexport const setTextNodeValue = (node: TextNode, text: string): void => {\n if (typeof text !== 'string') {\n text = String(text)\n }\n\n node.nodeValue = text\n}\n\nexport const nodeNames: Array<ElementNames> = ['kubb-export', 'kubb-file', 'kubb-source', 'kubb-import', 'kubb-text']\n","import { createContext } from 'react'\nimport Reconciler, { type ReactContext } from 'react-reconciler'\nimport { DefaultEventPriority, NoEventPriority } from 'react-reconciler/constants.js'\nimport { appendChildNode, createNode, createTextNode, insertBeforeNode, removeChildNode, setAttribute, setTextNodeValue } from './dom.ts'\nimport type { KubbNode } from './types'\nimport type { DOMElement, DOMNodeAttribute, ElementNames, TextNode } from './types.ts'\n\ndeclare module 'react-reconciler' {\n // @ts-expect-error custom override\n interface Reconciler {\n updateContainerSync(element: KubbNode, container: unknown, parentComponent: any, callback?: null | (() => void)): void\n flushSyncWork(): void\n createContainer(\n containerInfo: unknown,\n tag: Reconciler.RootTag,\n hydrationCallbacks: null | Reconciler.SuspenseHydrationCallbacks<any>,\n isStrictMode: boolean,\n concurrentUpdatesByDefaultOverride: null | boolean,\n identifierPrefix: string,\n onUncaughtError: (error: Error) => void,\n onCaughtError: (error: Error) => void,\n onRecoverableError: (error: Error) => void,\n transitionCallbacks: null | Reconciler.TransitionTracingCallbacks,\n ): Reconciler.OpaqueRoot\n }\n}\n\ntype Props = Record<string, unknown>\n\ntype HostContext = {\n type: ElementNames\n isFile: boolean\n isSource: boolean\n}\n\nlet currentUpdatePriority = NoEventPriority\n\n/**\n * @link https://www.npmjs.com/package/react-devtools-inline\n * @link https://github.com/nitin42/Making-a-custom-React-renderer/blob/master/part-one.md\n * @link https://github.com/facebook/react/tree/main/packages/react-reconciler#practical-examples\n * @link https://github.com/vadimdemedes/ink\n * @link https://github.com/pixijs/pixi-react/tree/main/packages\n * @link https://github.com/diegomura/react-pdf/blob/master/packages/reconciler/src/reconciler-31.ts\n */\nexport const Renderer = Reconciler({\n getRootHostContext: () => ({\n type: 'kubb-root',\n isFile: false,\n isSource: false,\n }),\n prepareForCommit: () => {\n return null\n },\n preparePortalMount: () => null,\n clearContainer: () => false,\n resetAfterCommit(rootNode: DOMElement) {\n if (typeof rootNode.onRender === 'function') {\n rootNode.onRender()\n }\n },\n getChildHostContext(parentHostContext: HostContext, type: ElementNames) {\n const isInsideText = type === 'kubb-text'\n const isFile = type === 'kubb-file' || parentHostContext.isFile\n const isSource = type === 'kubb-source' || parentHostContext.isSource\n\n return { isInsideText, isFile, isSource, type }\n },\n shouldSetTextContent: () => false,\n createInstance(originalType: ElementNames, newProps: Props, _root: DOMElement) {\n const node = createNode(originalType)\n\n for (const [key, value] of Object.entries(newProps)) {\n if (key === 'children') {\n continue\n }\n\n setAttribute(node, key, value as DOMNodeAttribute)\n }\n\n return node\n },\n createTextInstance(text: string, _root: DOMElement, hostContext: HostContext) {\n if (hostContext.isFile && !hostContext.isSource) {\n throw new Error(`[react] '${text}' should be part of <File.Source> component when using the <File/> component`)\n }\n\n return createTextNode(text)\n },\n resetTextContent() {},\n hideTextInstance(node: TextNode) {\n setTextNodeValue(node, '')\n },\n unhideTextInstance(node: TextNode, text: string) {\n setTextNodeValue(node, text)\n },\n getPublicInstance: (instance) => instance,\n appendInitialChild: appendChildNode,\n appendChild: appendChildNode,\n insertBefore: insertBeforeNode,\n finalizeInitialChildren(_node, _type, _props, _rootNode) {\n return false\n },\n supportsMutation: true,\n isPrimaryRenderer: true,\n supportsPersistence: false,\n supportsHydration: false,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n beforeActiveInstanceBlur() {},\n afterActiveInstanceBlur() {},\n detachDeletedInstance() {},\n getInstanceFromNode: () => null,\n prepareScopeUpdate() {},\n getInstanceFromScope: () => null,\n appendChildToContainer: appendChildNode,\n insertInContainerBefore: insertBeforeNode,\n removeChildFromContainer(node: DOMElement, removeNode: TextNode) {\n removeChildNode(node, removeNode)\n },\n commitMount() {},\n commitUpdate(node: DOMElement, _payload, _type, _oldProps: Props, newProps: Props) {\n const { props } = newProps\n\n if (props) {\n for (const [key, value] of Object.entries(props)) {\n setAttribute(node, key, value as DOMNodeAttribute)\n }\n }\n },\n commitTextUpdate(node: TextNode, _oldText, newText) {\n setTextNodeValue(node, newText)\n },\n removeChild(node: DOMElement, removeNode: TextNode) {\n removeChildNode(node, removeNode)\n },\n setCurrentUpdatePriority: (newPriority: number) => {\n currentUpdatePriority = newPriority\n },\n getCurrentUpdatePriority: () => currentUpdatePriority,\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority\n }\n\n return DefaultEventPriority\n },\n maySuspendCommit() {\n return false\n },\n // eslint-disable-next-line @typescript-eslint/naming-convention\n NotPendingTransition: undefined,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n HostTransitionContext: createContext(null) as unknown as ReactContext<unknown>,\n resetFormInstance() {},\n requestPostPaintCallback() {},\n shouldAttemptEagerTransition() {\n return false\n },\n trackSchedulerEvent() {},\n resolveEventType() {\n return null\n },\n resolveEventTimeStamp() {\n return -1.1\n },\n preloadInstance() {\n return true\n },\n startSuspendingCommit() {},\n suspendInstance() {},\n waitForCommitToBeReady() {\n return null\n },\n})\n\nexport type { FiberRoot } from 'react-reconciler'\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\n\nexport function squashExportNodes(node: DOMElement): Set<KubbFile.ResolvedExport> {\n let exports = new Set<KubbFile.Export>()\n\n node.childNodes.filter(Boolean).forEach((childNode) => {\n if (childNode.nodeName !== '#text' && nodeNames.includes(childNode.nodeName)) {\n exports = new Set([...exports, ...squashExportNodes(childNode)])\n }\n\n if (childNode.nodeName === 'kubb-export') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Export>\n exports.add(attributes)\n }\n })\n\n return exports\n}\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\n\nexport function squashImportNodes(node: DOMElement): Set<KubbFile.Import> {\n let imports = new Set<KubbFile.Import>()\n\n node.childNodes.filter(Boolean).forEach((childNode) => {\n if (childNode.nodeName !== '#text' && nodeNames.includes(childNode.nodeName)) {\n imports = new Set([...imports, ...squashImportNodes(childNode)])\n }\n\n if (childNode.nodeName === 'kubb-import') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Import>\n imports.add(attributes)\n }\n })\n\n return imports\n}\n","import { createExport, createImport, print } from '@kubb/fabric-core/parsers/typescript'\n\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\n\nexport function squashTextNodes(node: DOMElement): string {\n let text = ''\n\n for (const childNode of node.childNodes) {\n if (!childNode) {\n continue\n }\n\n let nodeText = ''\n\n const getPrintText = (text: string): string => {\n if (childNode.nodeName === 'kubb-import') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Import>\n\n return print([\n createImport({\n name: attributes.name,\n path: attributes.path,\n root: attributes.root,\n isTypeOnly: attributes.isTypeOnly,\n }),\n ])\n }\n\n if (childNode.nodeName === 'kubb-export') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Export>\n if (attributes.path) {\n return print([\n createExport({\n name: attributes.name,\n path: attributes.path,\n isTypeOnly: attributes.isTypeOnly,\n asAlias: attributes.asAlias,\n }),\n ])\n }\n }\n\n if (childNode.nodeName === 'kubb-source') {\n return text\n }\n\n return text\n }\n\n if (childNode.nodeName === '#text') {\n nodeText = childNode.nodeValue\n } else {\n if (['kubb-text', 'kubb-file', 'kubb-source'].includes(childNode.nodeName)) {\n nodeText = squashTextNodes(childNode)\n }\n\n nodeText = getPrintText(nodeText)\n\n if (childNode.nodeName === 'br') {\n nodeText = '\\n'\n }\n\n // no kubb element or br\n if (![...nodeNames, 'br'].includes(childNode.nodeName)) {\n const attributes = Object.entries(childNode.attributes).reduce((acc, [key, value]) => {\n if (typeof value === 'string') {\n return `${acc} ${key}=\"${value}\"`\n }\n\n return `${acc} ${key}={${value}}`\n }, '')\n nodeText = `<${childNode.nodeName}${attributes}>${squashTextNodes(childNode)}</${childNode.nodeName}>`\n }\n }\n\n text += nodeText\n }\n\n return text\n}\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement, ElementNames } from '../types.ts'\nimport { squashTextNodes } from './squashTextNodes.ts'\n\nexport function squashSourceNodes(node: DOMElement, ignores: Array<ElementNames>): Set<KubbFile.Source> {\n let sources = new Set<KubbFile.Source>()\n\n for (const childNode of node.childNodes) {\n if (!childNode) {\n continue\n }\n\n if (childNode.nodeName !== '#text' && ignores.includes(childNode.nodeName)) {\n continue\n }\n\n if (childNode.nodeName === 'kubb-source') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Source>\n const value = squashTextNodes(childNode)\n\n sources.add({\n ...attributes,\n // remove end enter\n value: value.trim().replace(/^\\s+|\\s+$/g, ''),\n })\n\n continue\n }\n\n if (childNode.nodeName !== '#text' && nodeNames.includes(childNode.nodeName)) {\n sources = new Set([...sources, ...squashSourceNodes(childNode, ignores)])\n }\n }\n\n return sources\n}\n","import type { FileManager } from '@kubb/fabric-core'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\nimport { squashExportNodes } from './squashExportNodes.ts'\nimport { squashImportNodes } from './squashImportNodes.ts'\nimport { squashSourceNodes } from './squashSourceNodes.ts'\n\nexport function processFiles(node: DOMElement, fileManager: FileManager) {\n for (let index = 0; index < node.childNodes.length; index++) {\n const childNode = node.childNodes[index]\n\n if (!childNode) {\n continue\n }\n\n if (childNode.nodeName !== '#text' && childNode.nodeName !== 'kubb-file' && nodeNames.includes(childNode.nodeName)) {\n processFiles(childNode, fileManager)\n }\n\n if (childNode.nodeName === 'kubb-file') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File>\n\n if (attributes.baseName && attributes.path) {\n const sources = squashSourceNodes(childNode, ['kubb-export', 'kubb-import'])\n\n const file: KubbFile.File = {\n baseName: attributes.baseName,\n path: attributes.path,\n sources: [...sources],\n exports: [...squashExportNodes(childNode)],\n imports: [...squashImportNodes(childNode)],\n meta: attributes.meta || {},\n footer: attributes.footer,\n banner: attributes.banner,\n }\n\n fileManager.add(file)\n }\n }\n }\n}\n","import process from 'node:process'\nimport type { FileManager } from '@kubb/fabric-core'\nimport type { ReactNode } from 'react'\nimport { ConcurrentRoot } from 'react-reconciler/constants.js'\nimport { onExit } from 'signal-exit'\nimport { Root } from './components/Root.tsx'\nimport { createNode } from './dom.ts'\nimport type { FiberRoot } from './Renderer.ts'\nimport { Renderer } from './Renderer.ts'\nimport type { DOMElement } from './types.ts'\nimport { processFiles } from './utils/processFiles.ts'\nimport { squashTextNodes } from './utils/squashTextNodes.ts'\n\ntype Options = {\n fileManager: FileManager\n stdout?: NodeJS.WriteStream\n stdin?: NodeJS.ReadStream\n stderr?: NodeJS.WriteStream\n /**\n * Set this to true to always see the result of the render in the console(line per render)\n */\n debug?: boolean\n}\n\nexport class Runtime {\n readonly #options: Options\n // Ignore last render after unmounting a tree to prevent empty output before exit\n #isUnmounted: boolean\n\n exitPromise?: Promise<void>\n readonly #container: FiberRoot\n readonly #rootNode: DOMElement\n\n constructor(options: Options) {\n this.#options = options\n\n this.#rootNode = createNode('kubb-root')\n this.#rootNode.onRender = this.onRender\n this.#rootNode.onImmediateRender = this.onRender\n\n // Ignore last render after unmounting a tree to prevent empty output before exit\n this.#isUnmounted = false\n this.unmount.bind(this)\n\n const originalError = console.error\n console.error = (data: string | Error) => {\n const message = typeof data === 'string' ? data : data?.message\n\n if (message?.match(/Encountered two children with the same key/gi)) {\n return\n }\n if (message?.match(/React will try to recreat/gi)) {\n return\n }\n if (message?.match(/Each child in a list should have a unique/gi)) {\n return\n }\n if (message?.match(/The above error occurred in the <KubbErrorBoundary/gi)) {\n return\n }\n\n if (message?.match(/A React Element from an older version of React was render/gi)) {\n return\n }\n\n originalError(data)\n }\n\n // Report when an error was detected in a previous render\n // https://github.com/pmndrs/react-three-fiber/pull/2261\n const logRecoverableError =\n typeof reportError === 'function'\n ? // In modern browsers, reportError will dispatch an error event,\n // emulating an uncaught JavaScript error.\n reportError\n : // In older browsers and test environments, fallback to console.error.\n console.error\n\n const rootTag = ConcurrentRoot\n const hydrationCallbacks = null\n const isStrictMode = false\n const concurrentUpdatesByDefaultOverride = false\n const identifierPrefix = 'id'\n const onUncaughtError = logRecoverableError\n const onCaughtError = logRecoverableError\n const onRecoverableError = logRecoverableError\n const transitionCallbacks = null\n\n this.#container = Renderer.createContainer(\n this.#rootNode,\n rootTag,\n hydrationCallbacks,\n isStrictMode,\n concurrentUpdatesByDefaultOverride,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n )\n\n // Unmount when process exits\n this.unsubscribeExit = onExit(\n (code) => {\n this.unmount(code)\n },\n { alwaysLast: false },\n ).bind(this)\n\n Renderer.injectIntoDevTools({\n bundleType: 1, // 0 for PROD, 1 for DEV\n version: '19.1.0', // should be React version and not Kubb's custom version\n rendererPackageName: 'kubb', // package name\n })\n }\n\n get fileManager() {\n return this.#options.fileManager\n }\n\n resolveExitPromise: () => void = () => {}\n rejectExitPromise: (reason?: Error) => void = () => {}\n unsubscribeExit: () => void = () => {}\n onRender: () => void = async () => {\n if (this.#isUnmounted) {\n return\n }\n\n // TODO remove to allow multiple renders\n this.fileManager.clear()\n\n processFiles(this.#rootNode, this.fileManager)\n\n if (!this.#options?.debug && !this.#options?.stdout) {\n return\n }\n\n const output = await this.#getOutput(this.#rootNode)\n\n if (this.#options?.debug) {\n console.log('Rendering: \\n')\n console.log(output)\n }\n\n if (this.#options?.stdout && process.env.NODE_ENV !== 'test') {\n this.#options.stdout.clearLine(0)\n this.#options.stdout.cursorTo(0)\n this.#options.stdout.write(output)\n }\n }\n onError(error: Error): void {\n if (process.env.NODE_ENV === 'test') {\n console.warn(error)\n }\n\n throw error\n }\n onExit(error?: Error): void {\n this.unmount(error)\n }\n\n async #getOutput(node: DOMElement): Promise<string> {\n const text = squashTextNodes(node)\n const files = this.fileManager.files\n\n return files.length\n ? [...files]\n .flatMap((file) => [...file.sources].map((item) => item.value))\n .filter(Boolean)\n .join('\\n\\n')\n : text\n }\n\n render(node: ReactNode): void {\n const element = (\n <Root onExit={this.onExit.bind(this)} onError={this.onError.bind(this)}>\n {node}\n </Root>\n )\n\n Renderer.updateContainerSync(element, this.#container, null, null)\n Renderer.flushSyncWork()\n }\n\n async renderToString(node: ReactNode): Promise<string> {\n const element = (\n <Root onExit={this.onExit.bind(this)} onError={this.onError.bind(this)}>\n {node}\n </Root>\n )\n\n Renderer.updateContainerSync(element, this.#container, null, null)\n Renderer.flushSyncWork()\n\n this.fileManager.clear()\n\n return this.#getOutput(this.#rootNode)\n }\n\n unmount(error?: Error | number | null): void {\n if (this.#isUnmounted) {\n return\n }\n\n if (this.#options?.debug) {\n console.log('Unmount', error)\n }\n\n this.onRender()\n this.unsubscribeExit()\n\n this.#isUnmounted = true\n\n Renderer.updateContainerSync(null, this.#container, null, null)\n\n if (error instanceof Error) {\n this.rejectExitPromise(error)\n\n return\n }\n\n this.resolveExitPromise()\n }\n\n async waitUntilExit(): Promise<void> {\n if (!this.exitPromise) {\n this.exitPromise = new Promise((resolve, reject) => {\n this.resolveExitPromise = resolve\n this.rejectExitPromise = reject\n })\n }\n\n return this.exitPromise\n }\n}\n","import { createPlugin } from '@kubb/fabric-core/plugins'\nimport { createElement, type ElementType } from 'react'\nimport { Runtime } from '../Runtime.tsx'\n\nexport type Options = {\n stdout?: NodeJS.WriteStream\n stdin?: NodeJS.ReadStream\n stderr?: NodeJS.WriteStream\n /**\n * Set this to true to always see the result of the render in the console(line per render)\n */\n debug?: boolean\n}\n\ntype ExtendOptions = {\n render(App: ElementType): Promise<void> | void\n renderToString(App: ElementType): Promise<string> | string\n waitUntilExit(): Promise<void>\n}\n\ndeclare global {\n namespace Kubb {\n interface Fabric {\n render(App: ElementType): Promise<void> | void\n renderToString(App: ElementType): Promise<string> | string\n waitUntilExit(): Promise<void>\n }\n }\n}\n\nexport const reactPlugin = createPlugin<Options, ExtendOptions>({\n name: 'react',\n install() {},\n inject(ctx, options = {}) {\n const runtime = new Runtime({ fileManager: ctx.fileManager, ...options })\n\n return {\n async render(App) {\n runtime.render(createElement(App))\n await ctx.emit('start')\n },\n async renderToString(App) {\n await ctx.emit('start')\n return runtime.renderToString(createElement(App))\n },\n async waitUntilExit() {\n await runtime.waitUntilExit()\n\n await ctx.emit('end')\n },\n }\n },\n})\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reactPlugin-Dj5m_pqf.cjs","names":["Component","onExit","node: TextNode","nodeNames: Array<ElementNames>","NoEventPriority","DefaultEventPriority","exports","text","file: KubbFile.File","process","ConcurrentRoot"],"sources":["../src/components/Root.tsx","../src/dom.ts","../src/Renderer.ts","../src/utils/squashExportNodes.ts","../src/utils/squashImportNodes.ts","../src/utils/squashTextNodes.ts","../src/utils/squashSourceNodes.ts","../src/utils/processFiles.ts","../src/Runtime.tsx","../src/plugins/reactPlugin.ts"],"sourcesContent":["import { Component, createContext } from 'react'\n\nimport type { KubbNode } from '../types.ts'\n\ntype ErrorBoundaryProps = {\n onError: (error: Error) => void\n children?: KubbNode\n}\n\nclass ErrorBoundary extends Component<{\n onError: ErrorBoundaryProps['onError']\n children?: KubbNode\n}> {\n state = { hasError: false }\n\n static displayName = 'KubbErrorBoundary'\n static getDerivedStateFromError(_error: Error) {\n return { hasError: true }\n }\n\n componentDidCatch(error: Error) {\n if (error) {\n this.props.onError(error)\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null\n }\n return this.props.children\n }\n}\n\nexport type RootContextProps = {\n /**\n * Exit (unmount) the whole Ink app.\n */\n readonly exit: (error?: Error) => void\n}\n\nexport const RootContext = createContext<RootContextProps>({\n exit: () => {},\n})\n\ntype RootProps = {\n /**\n * Exit (unmount) hook\n */\n readonly onExit: (error?: Error) => void\n /**\n * Error hook\n */\n readonly onError: (error: Error) => void\n readonly children?: KubbNode\n}\n\nexport function Root({ onError, onExit, children }: RootProps) {\n try {\n return (\n <ErrorBoundary\n onError={(error) => {\n onError(error)\n }}\n >\n <RootContext.Provider value={{ exit: onExit }}>{children}</RootContext.Provider>\n </ErrorBoundary>\n )\n } catch (_e) {\n return null\n }\n}\n\nRoot.Context = RootContext\nRoot.displayName = 'KubbRoot'\n","import type { DOMElement, DOMNode, DOMNodeAttribute, ElementNames, TextNode } from './types.ts'\n\nexport const createNode = (nodeName: string): DOMElement => {\n const node: DOMElement = {\n nodeName: nodeName as DOMElement['nodeName'],\n attributes: {},\n childNodes: [],\n parentNode: undefined,\n }\n\n return node\n}\n\nexport const appendChildNode = (node: DOMNode, childNode: DOMElement | DOMNode): void => {\n if (childNode.parentNode) {\n removeChildNode(childNode.parentNode, childNode)\n }\n\n if (node.nodeName !== '#text') {\n childNode.parentNode = node\n node.childNodes.push(childNode)\n }\n}\n\nexport const insertBeforeNode = (node: DOMElement, newChildNode: DOMNode, beforeChildNode: DOMNode): void => {\n if (newChildNode.parentNode) {\n removeChildNode(newChildNode.parentNode, newChildNode)\n }\n\n newChildNode.parentNode = node\n\n const index = node.childNodes.indexOf(beforeChildNode)\n if (index >= 0) {\n node.childNodes.splice(index, 0, newChildNode)\n\n return\n }\n\n node.childNodes.push(newChildNode)\n}\n\nexport const removeChildNode = (node: DOMElement, removeNode: DOMNode): void => {\n removeNode.parentNode = undefined\n\n const index = node.childNodes.indexOf(removeNode)\n if (index >= 0) {\n node.childNodes.splice(index, 1)\n }\n}\n\nexport const setAttribute = (node: DOMElement, key: string, value: DOMNodeAttribute): void => {\n node.attributes[key] = value\n}\n\nexport const createTextNode = (text: string): TextNode => {\n const node: TextNode = {\n nodeName: '#text',\n nodeValue: text,\n parentNode: undefined,\n }\n\n setTextNodeValue(node, text)\n\n return node\n}\n\nexport const setTextNodeValue = (node: TextNode, text: string): void => {\n if (typeof text !== 'string') {\n text = String(text)\n }\n\n node.nodeValue = text\n}\n\nexport const nodeNames: Array<ElementNames> = ['kubb-export', 'kubb-file', 'kubb-source', 'kubb-import', 'kubb-text']\n","import { createContext } from 'react'\nimport Reconciler, { type ReactContext } from 'react-reconciler'\nimport { DefaultEventPriority, NoEventPriority } from 'react-reconciler/constants.js'\nimport { appendChildNode, createNode, createTextNode, insertBeforeNode, removeChildNode, setAttribute, setTextNodeValue } from './dom.ts'\nimport type { KubbNode } from './types'\nimport type { DOMElement, DOMNodeAttribute, ElementNames, TextNode } from './types.ts'\n\ndeclare module 'react-reconciler' {\n // @ts-expect-error custom override\n interface Reconciler {\n updateContainerSync(element: KubbNode, container: unknown, parentComponent: any, callback?: null | (() => void)): void\n flushSyncWork(): void\n createContainer(\n containerInfo: unknown,\n tag: Reconciler.RootTag,\n hydrationCallbacks: null | Reconciler.SuspenseHydrationCallbacks<any>,\n isStrictMode: boolean,\n concurrentUpdatesByDefaultOverride: null | boolean,\n identifierPrefix: string,\n onUncaughtError: (error: Error) => void,\n onCaughtError: (error: Error) => void,\n onRecoverableError: (error: Error) => void,\n transitionCallbacks: null | Reconciler.TransitionTracingCallbacks,\n ): Reconciler.OpaqueRoot\n }\n}\n\ntype Props = Record<string, unknown>\n\ntype HostContext = {\n type: ElementNames\n isFile: boolean\n isSource: boolean\n}\n\nlet currentUpdatePriority = NoEventPriority\n\n/**\n * @link https://www.npmjs.com/package/react-devtools-inline\n * @link https://github.com/nitin42/Making-a-custom-React-renderer/blob/master/part-one.md\n * @link https://github.com/facebook/react/tree/main/packages/react-reconciler#practical-examples\n * @link https://github.com/vadimdemedes/ink\n * @link https://github.com/pixijs/pixi-react/tree/main/packages\n * @link https://github.com/diegomura/react-pdf/blob/master/packages/reconciler/src/reconciler-31.ts\n */\nexport const Renderer = Reconciler({\n getRootHostContext: () => ({\n type: 'kubb-root',\n isFile: false,\n isSource: false,\n }),\n prepareForCommit: () => {\n return null\n },\n preparePortalMount: () => null,\n clearContainer: () => false,\n resetAfterCommit(rootNode: DOMElement) {\n if (typeof rootNode.onRender === 'function') {\n rootNode.onRender()\n }\n },\n getChildHostContext(parentHostContext: HostContext, type: ElementNames) {\n const isInsideText = type === 'kubb-text'\n const isFile = type === 'kubb-file' || parentHostContext.isFile\n const isSource = type === 'kubb-source' || parentHostContext.isSource\n\n return { isInsideText, isFile, isSource, type }\n },\n shouldSetTextContent: () => false,\n createInstance(originalType: ElementNames, newProps: Props, _root: DOMElement) {\n const node = createNode(originalType)\n\n for (const [key, value] of Object.entries(newProps)) {\n if (key === 'children') {\n continue\n }\n\n setAttribute(node, key, value as DOMNodeAttribute)\n }\n\n return node\n },\n createTextInstance(text: string, _root: DOMElement, hostContext: HostContext) {\n if (hostContext.isFile && !hostContext.isSource) {\n throw new Error(`[react] '${text}' should be part of <File.Source> component when using the <File/> component`)\n }\n\n return createTextNode(text)\n },\n resetTextContent() {},\n hideTextInstance(node: TextNode) {\n setTextNodeValue(node, '')\n },\n unhideTextInstance(node: TextNode, text: string) {\n setTextNodeValue(node, text)\n },\n getPublicInstance: (instance) => instance,\n appendInitialChild: appendChildNode,\n appendChild: appendChildNode,\n insertBefore: insertBeforeNode,\n finalizeInitialChildren(_node, _type, _props, _rootNode) {\n return false\n },\n supportsMutation: true,\n isPrimaryRenderer: true,\n supportsPersistence: false,\n supportsHydration: false,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n beforeActiveInstanceBlur() {},\n afterActiveInstanceBlur() {},\n detachDeletedInstance() {},\n getInstanceFromNode: () => null,\n prepareScopeUpdate() {},\n getInstanceFromScope: () => null,\n appendChildToContainer: appendChildNode,\n insertInContainerBefore: insertBeforeNode,\n removeChildFromContainer(node: DOMElement, removeNode: TextNode) {\n removeChildNode(node, removeNode)\n },\n commitMount() {},\n commitUpdate(node: DOMElement, _payload, _type, _oldProps: Props, newProps: Props) {\n const { props } = newProps\n\n if (props) {\n for (const [key, value] of Object.entries(props)) {\n setAttribute(node, key, value as DOMNodeAttribute)\n }\n }\n },\n commitTextUpdate(node: TextNode, _oldText, newText) {\n setTextNodeValue(node, newText)\n },\n removeChild(node: DOMElement, removeNode: TextNode) {\n removeChildNode(node, removeNode)\n },\n setCurrentUpdatePriority: (newPriority: number) => {\n currentUpdatePriority = newPriority\n },\n getCurrentUpdatePriority: () => currentUpdatePriority,\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority\n }\n\n return DefaultEventPriority\n },\n maySuspendCommit() {\n return false\n },\n // eslint-disable-next-line @typescript-eslint/naming-convention\n NotPendingTransition: undefined,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n HostTransitionContext: createContext(null) as unknown as ReactContext<unknown>,\n resetFormInstance() {},\n requestPostPaintCallback() {},\n shouldAttemptEagerTransition() {\n return false\n },\n trackSchedulerEvent() {},\n resolveEventType() {\n return null\n },\n resolveEventTimeStamp() {\n return -1.1\n },\n preloadInstance() {\n return true\n },\n startSuspendingCommit() {},\n suspendInstance() {},\n waitForCommitToBeReady() {\n return null\n },\n})\n\nexport type { FiberRoot } from 'react-reconciler'\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\n\nexport function squashExportNodes(node: DOMElement): Set<KubbFile.ResolvedExport> {\n let exports = new Set<KubbFile.Export>()\n\n node.childNodes.filter(Boolean).forEach((childNode) => {\n if (childNode.nodeName !== '#text' && nodeNames.includes(childNode.nodeName)) {\n exports = new Set([...exports, ...squashExportNodes(childNode)])\n }\n\n if (childNode.nodeName === 'kubb-export') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Export>\n exports.add(attributes)\n }\n })\n\n return exports\n}\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\n\nexport function squashImportNodes(node: DOMElement): Set<KubbFile.Import> {\n let imports = new Set<KubbFile.Import>()\n\n node.childNodes.filter(Boolean).forEach((childNode) => {\n if (childNode.nodeName !== '#text' && nodeNames.includes(childNode.nodeName)) {\n imports = new Set([...imports, ...squashImportNodes(childNode)])\n }\n\n if (childNode.nodeName === 'kubb-import') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Import>\n imports.add(attributes)\n }\n })\n\n return imports\n}\n","import { createExport, createImport, print } from '@kubb/fabric-core/parsers/typescript'\n\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\n\nexport function squashTextNodes(node: DOMElement): string {\n let text = ''\n\n for (const childNode of node.childNodes) {\n if (!childNode) {\n continue\n }\n\n let nodeText = ''\n\n const getPrintText = (text: string): string => {\n if (childNode.nodeName === 'kubb-import') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Import>\n\n return print([\n createImport({\n name: attributes.name,\n path: attributes.path,\n root: attributes.root,\n isTypeOnly: attributes.isTypeOnly,\n }),\n ])\n }\n\n if (childNode.nodeName === 'kubb-export') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Export>\n if (attributes.path) {\n return print([\n createExport({\n name: attributes.name,\n path: attributes.path,\n isTypeOnly: attributes.isTypeOnly,\n asAlias: attributes.asAlias,\n }),\n ])\n }\n }\n\n if (childNode.nodeName === 'kubb-source') {\n return text\n }\n\n return text\n }\n\n if (childNode.nodeName === '#text') {\n nodeText = childNode.nodeValue\n } else {\n if (['kubb-text', 'kubb-file', 'kubb-source'].includes(childNode.nodeName)) {\n nodeText = squashTextNodes(childNode)\n }\n\n nodeText = getPrintText(nodeText)\n\n if (childNode.nodeName === 'br') {\n nodeText = '\\n'\n }\n\n // no kubb element or br\n if (![...nodeNames, 'br'].includes(childNode.nodeName)) {\n const attributes = Object.entries(childNode.attributes).reduce((acc, [key, value]) => {\n if (typeof value === 'string') {\n return `${acc} ${key}=\"${value}\"`\n }\n\n return `${acc} ${key}={${value}}`\n }, '')\n nodeText = `<${childNode.nodeName}${attributes}>${squashTextNodes(childNode)}</${childNode.nodeName}>`\n }\n }\n\n text += nodeText\n }\n\n return text\n}\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement, ElementNames } from '../types.ts'\nimport { squashTextNodes } from './squashTextNodes.ts'\n\nexport function squashSourceNodes(node: DOMElement, ignores: Array<ElementNames>): Set<KubbFile.Source> {\n let sources = new Set<KubbFile.Source>()\n\n for (const childNode of node.childNodes) {\n if (!childNode) {\n continue\n }\n\n if (childNode.nodeName !== '#text' && ignores.includes(childNode.nodeName)) {\n continue\n }\n\n if (childNode.nodeName === 'kubb-source') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File.Source>\n const value = squashTextNodes(childNode)\n\n sources.add({\n ...attributes,\n // remove end enter\n value: value.trim().replace(/^\\s+|\\s+$/g, ''),\n })\n\n continue\n }\n\n if (childNode.nodeName !== '#text' && nodeNames.includes(childNode.nodeName)) {\n sources = new Set([...sources, ...squashSourceNodes(childNode, ignores)])\n }\n }\n\n return sources\n}\n","import type { FileManager } from '@kubb/fabric-core'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type React from 'react'\nimport type { File } from '../components/File.tsx'\nimport { nodeNames } from '../dom.ts'\nimport type { DOMElement } from '../types.ts'\nimport { squashExportNodes } from './squashExportNodes.ts'\nimport { squashImportNodes } from './squashImportNodes.ts'\nimport { squashSourceNodes } from './squashSourceNodes.ts'\n\nexport function processFiles(node: DOMElement, fileManager: FileManager) {\n for (let index = 0; index < node.childNodes.length; index++) {\n const childNode = node.childNodes[index]\n\n if (!childNode) {\n continue\n }\n\n if (childNode.nodeName !== '#text' && childNode.nodeName !== 'kubb-file' && nodeNames.includes(childNode.nodeName)) {\n processFiles(childNode, fileManager)\n }\n\n if (childNode.nodeName === 'kubb-file') {\n const attributes = childNode.attributes as React.ComponentProps<typeof File>\n\n if (attributes.baseName && attributes.path) {\n const sources = squashSourceNodes(childNode, ['kubb-export', 'kubb-import'])\n\n const file: KubbFile.File = {\n baseName: attributes.baseName,\n path: attributes.path,\n sources: [...sources],\n exports: [...squashExportNodes(childNode)],\n imports: [...squashImportNodes(childNode)],\n meta: attributes.meta || {},\n footer: attributes.footer,\n banner: attributes.banner,\n }\n\n fileManager.add(file)\n }\n }\n }\n}\n","import process from 'node:process'\nimport type { FileManager } from '@kubb/fabric-core'\nimport type { ReactNode } from 'react'\nimport { ConcurrentRoot } from 'react-reconciler/constants.js'\nimport { onExit } from 'signal-exit'\nimport { Root } from './components/Root.tsx'\nimport { createNode } from './dom.ts'\nimport type { FiberRoot } from './Renderer.ts'\nimport { Renderer } from './Renderer.ts'\nimport type { DOMElement } from './types.ts'\nimport { processFiles } from './utils/processFiles.ts'\nimport { squashTextNodes } from './utils/squashTextNodes.ts'\n\ntype Options = {\n fileManager: FileManager\n stdout?: NodeJS.WriteStream\n stdin?: NodeJS.ReadStream\n stderr?: NodeJS.WriteStream\n /**\n * Set this to true to always see the result of the render in the console(line per render)\n */\n debug?: boolean\n}\n\nexport class Runtime {\n readonly #options: Options\n // Ignore last render after unmounting a tree to prevent empty output before exit\n #isUnmounted: boolean\n\n exitPromise?: Promise<void>\n readonly #container: FiberRoot\n readonly #rootNode: DOMElement\n\n constructor(options: Options) {\n this.#options = options\n\n this.#rootNode = createNode('kubb-root')\n this.#rootNode.onRender = this.onRender\n this.#rootNode.onImmediateRender = this.onRender\n\n // Ignore last render after unmounting a tree to prevent empty output before exit\n this.#isUnmounted = false\n this.unmount.bind(this)\n\n const originalError = console.error\n console.error = (data: string | Error) => {\n const message = typeof data === 'string' ? data : data?.message\n\n if (message?.match(/Encountered two children with the same key/gi)) {\n return\n }\n if (message?.match(/React will try to recreat/gi)) {\n return\n }\n if (message?.match(/Each child in a list should have a unique/gi)) {\n return\n }\n if (message?.match(/The above error occurred in the <KubbErrorBoundary/gi)) {\n return\n }\n\n if (message?.match(/A React Element from an older version of React was render/gi)) {\n return\n }\n\n originalError(data)\n }\n\n // Report when an error was detected in a previous render\n // https://github.com/pmndrs/react-three-fiber/pull/2261\n const logRecoverableError =\n typeof reportError === 'function'\n ? // In modern browsers, reportError will dispatch an error event,\n // emulating an uncaught JavaScript error.\n reportError\n : // In older browsers and test environments, fallback to console.error.\n console.error\n\n const rootTag = ConcurrentRoot\n const hydrationCallbacks = null\n const isStrictMode = false\n const concurrentUpdatesByDefaultOverride = false\n const identifierPrefix = 'id'\n const onUncaughtError = logRecoverableError\n const onCaughtError = logRecoverableError\n const onRecoverableError = logRecoverableError\n const transitionCallbacks = null\n\n this.#container = Renderer.createContainer(\n this.#rootNode,\n rootTag,\n hydrationCallbacks,\n isStrictMode,\n concurrentUpdatesByDefaultOverride,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n )\n\n // Unmount when process exits\n this.unsubscribeExit = onExit(\n (code) => {\n this.unmount(code)\n },\n { alwaysLast: false },\n ).bind(this)\n\n Renderer.injectIntoDevTools({\n bundleType: 1, // 0 for PROD, 1 for DEV\n version: '19.1.0', // should be React version and not Kubb's custom version\n rendererPackageName: 'kubb', // package name\n })\n }\n\n get fileManager() {\n return this.#options.fileManager\n }\n\n resolveExitPromise: () => void = () => {}\n rejectExitPromise: (reason?: Error) => void = () => {}\n unsubscribeExit: () => void = () => {}\n onRender: () => void = async () => {\n if (this.#isUnmounted) {\n return\n }\n\n // TODO remove to allow multiple renders\n this.fileManager.clear()\n\n processFiles(this.#rootNode, this.fileManager)\n\n if (!this.#options?.debug && !this.#options?.stdout) {\n return\n }\n\n const output = await this.#getOutput(this.#rootNode)\n\n if (this.#options?.debug) {\n console.log('Rendering: \\n')\n console.log(output)\n }\n\n if (this.#options?.stdout && process.env.NODE_ENV !== 'test') {\n this.#options.stdout.clearLine(0)\n this.#options.stdout.cursorTo(0)\n this.#options.stdout.write(output)\n }\n }\n onError(error: Error): void {\n if (process.env.NODE_ENV === 'test') {\n console.warn(error)\n }\n\n throw error\n }\n onExit(error?: Error): void {\n this.unmount(error)\n }\n\n async #getOutput(node: DOMElement): Promise<string> {\n const text = squashTextNodes(node)\n const files = this.fileManager.files\n\n return files.length\n ? [...files]\n .flatMap((file) => [...file.sources].map((item) => item.value))\n .filter(Boolean)\n .join('\\n\\n')\n : text\n }\n\n render(node: ReactNode): void {\n const element = (\n <Root onExit={this.onExit.bind(this)} onError={this.onError.bind(this)}>\n {node}\n </Root>\n )\n\n Renderer.updateContainerSync(element, this.#container, null, null)\n Renderer.flushSyncWork()\n }\n\n async renderToString(node: ReactNode): Promise<string> {\n const element = (\n <Root onExit={this.onExit.bind(this)} onError={this.onError.bind(this)}>\n {node}\n </Root>\n )\n\n Renderer.updateContainerSync(element, this.#container, null, null)\n Renderer.flushSyncWork()\n\n this.fileManager.clear()\n\n return this.#getOutput(this.#rootNode)\n }\n\n unmount(error?: Error | number | null): void {\n if (this.#isUnmounted) {\n return\n }\n\n if (this.#options?.debug) {\n console.log('Unmount', error)\n }\n\n this.onRender()\n this.unsubscribeExit()\n\n this.#isUnmounted = true\n\n Renderer.updateContainerSync(null, this.#container, null, null)\n\n if (error instanceof Error) {\n this.rejectExitPromise(error)\n\n return\n }\n\n this.resolveExitPromise()\n }\n\n async waitUntilExit(): Promise<void> {\n if (!this.exitPromise) {\n this.exitPromise = new Promise((resolve, reject) => {\n this.resolveExitPromise = resolve\n this.rejectExitPromise = reject\n })\n }\n\n return this.exitPromise\n }\n}\n","import { createPlugin } from '@kubb/fabric-core/plugins'\nimport { createElement, type ElementType } from 'react'\nimport { Runtime } from '../Runtime.tsx'\n\nexport type Options = {\n stdout?: NodeJS.WriteStream\n stdin?: NodeJS.ReadStream\n stderr?: NodeJS.WriteStream\n /**\n * Set this to true to always see the result of the render in the console(line per render)\n */\n debug?: boolean\n}\n\ntype ExtendOptions = {\n render(App: ElementType): Promise<void> | void\n renderToString(App: ElementType): Promise<string> | string\n waitUntilExit(): Promise<void>\n}\n\ndeclare global {\n namespace Kubb {\n interface Fabric {\n render(App: ElementType): Promise<void> | void\n renderToString(App: ElementType): Promise<string> | string\n waitUntilExit(): Promise<void>\n }\n }\n}\n\nexport const reactPlugin = createPlugin<Options, ExtendOptions>({\n name: 'react',\n install() {},\n inject(ctx, options = {}) {\n const runtime = new Runtime({ fileManager: ctx.fileManager, ...options })\n\n return {\n async render(App) {\n runtime.render(createElement(App))\n await ctx.emit('start')\n },\n async renderToString(App) {\n await ctx.emit('start')\n return runtime.renderToString(createElement(App))\n },\n async waitUntilExit() {\n await runtime.waitUntilExit()\n\n await ctx.emit('end')\n },\n }\n },\n})\n"],"mappings":"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"}
|