@kubb/react
Version:
React integration for Kubb, providing JSX runtime support and React component generation capabilities for code generation plugins.
307 lines (292 loc) • 9.02 kB
TypeScript
import './globals-CNhVJIBu.js';
import { KubbFile } from '@kubb/core/fs';
import { Logger } from '@kubb/core/logger';
import * as react from 'react';
import { ReactNode, Key } from 'react';
export { createContext, createElement, use, useContext, useEffect, useReducer, useRef, useState } from 'react';
import * as react_jsx_runtime from 'react/jsx-runtime';
import { FileMetaBase, PluginManager, Plugin, PluginFactoryOptions, FileManager } from '@kubb/core';
import { K as KubbNode, J as JSDoc } from './types-Jc5o8Ldu.js';
export { F as FunctionParams, c as createFunctionParams } from './types-Jc5o8Ldu.js';
type RootContextProps<Meta extends Record<string, unknown> = Record<string, unknown>> = {
/**
* Exit (unmount) the whole Ink app.
*/
readonly exit: (error?: Error) => void;
readonly meta: Meta;
};
type RendererResult = {
output: string;
imports: Array<KubbFile.Import>;
exports: Array<KubbFile.Export>;
files: Array<KubbFile.File>;
};
type ReactTemplateOptions = {
stdout?: NodeJS.WriteStream;
stdin?: NodeJS.ReadStream;
stderr?: NodeJS.WriteStream;
logger?: Logger;
/**
* Set this to true to always see the result of the render in the console(line per render)
*/
debug?: boolean;
};
type Context = Omit<RootContextProps, 'exit'>;
declare class ReactTemplate {
#private;
constructor(options: ReactTemplateOptions);
get output(): string;
get files(): Array<KubbFile.File>;
resolveExitPromise: (result: RendererResult) => void;
rejectExitPromise: (reason?: Error) => void;
unsubscribeExit: () => void;
onRender: () => void;
onError(error: Error): void;
onExit(error?: Error): void;
render(node: ReactNode, context?: Context): RendererResult;
renderToString(node: ReactNode, context?: Context): Promise<string>;
unmount(error?: Error | number | null): void;
waitUntilExit(): Promise<RendererResult>;
}
declare function createRoot(options?: ReactTemplateOptions): ReactTemplate;
type FileContextProps<TMeta extends FileMetaBase = FileMetaBase> = {
/**
* Name to be used to dynamicly create the baseName(based on input.path).
* Based on UNIX basename
* @link https://nodejs.org/api/path.html#pathbasenamepath-suffix
*/
baseName: KubbFile.BaseName;
/**
* Path will be full qualified path to a specified file.
*/
path: KubbFile.Path;
meta?: TMeta;
};
type BasePropsWithBaseName = {
/**
* Name to be used to dynamicly create the baseName(based on input.path).
* Based on UNIX basename
* @link https://nodejs.org/api/path.html#pathbasenamepath-suffix
*/
baseName: KubbFile.BaseName;
/**
* Path will be full qualified path to a specified file.
*/
path: KubbFile.Path;
};
type BasePropsWithoutBaseName = {
baseName?: never;
/**
* Path will be full qualified path to a specified file.
*/
path?: KubbFile.Path;
};
type BaseProps = BasePropsWithBaseName | BasePropsWithoutBaseName;
type Props$5<TMeta extends FileMetaBase = FileMetaBase> = BaseProps & {
key?: Key;
meta?: TMeta;
banner?: string;
footer?: string;
children?: KubbNode;
};
declare function File<TMeta extends FileMetaBase = FileMetaBase>({ children, ...rest }: Props$5<TMeta>): react_jsx_runtime.JSX.Element;
declare namespace File {
var displayName: string;
var Export: typeof FileExport;
var Import: typeof FileImport;
var Source: typeof FileSource;
var Context: react.Context<FileContextProps<FileMetaBase>>;
}
type FileSourceProps = Omit<KubbFile.Source, 'value'> & {
key?: Key;
children?: KubbNode;
};
declare function FileSource({ isTypeOnly, name, isExportable, isIndexable, children }: FileSourceProps): react_jsx_runtime.JSX.Element;
declare namespace FileSource {
var displayName: string;
}
type FileExportProps = KubbFile.Export & {
key?: Key;
};
declare function FileExport({ name, path, isTypeOnly, asAlias }: FileExportProps): react_jsx_runtime.JSX.Element;
declare namespace FileExport {
var displayName: string;
}
type FileImportProps = KubbFile.Import & {
key?: Key;
};
declare function FileImport({ name, root, path, isTypeOnly, isNameSpace }: FileImportProps): react_jsx_runtime.JSX.Element;
declare namespace FileImport {
var displayName: string;
}
type Props$4 = {
key?: Key;
/**
* Name of the function.
*/
name: string;
/**
* Add default when export is being used
*/
default?: boolean;
/**
* Parameters/options/props that need to be used.
*/
params?: string;
/**
* Does this function need to be exported.
*/
export?: boolean;
/**
* Does the function has async/promise behaviour.
* This will also add `Promise<returnType>` as the returnType.
*/
async?: boolean;
/**
* Generics that needs to be added for TypeScript.
*/
generics?: string | string[];
/**
* ReturnType(see async for adding Promise type).
*/
returnType?: string;
/**
* Options for JSdocs.
*/
JSDoc?: JSDoc;
children?: KubbNode;
};
declare function Function({ name, default: isDefault, export: canExport, async, generics, params, returnType, JSDoc, children }: Props$4): react_jsx_runtime.JSX.Element;
declare namespace Function {
var displayName: string;
var Arrow: typeof ArrowFunction;
}
type ArrowFunctionProps = Props$4 & {
/**
* Create Arrow function in one line
*/
singleLine?: boolean;
};
declare function ArrowFunction({ name, default: isDefault, export: canExport, async, generics, params, returnType, JSDoc, singleLine, children }: ArrowFunctionProps): react_jsx_runtime.JSX.Element;
declare namespace ArrowFunction {
var displayName: string;
}
type Props$3 = {
key?: Key;
/**
* Change the indent.
* @default 0
*/
indentSize?: number;
children?: KubbNode;
};
declare function Text({ indentSize, children }: Props$3): react_jsx_runtime.JSX.Element;
declare namespace Text {
var displayName: string;
var Space: typeof Space;
}
type SpaceProps = {
/**
* Change the indent
* @default 1
*/
size?: number;
};
declare function Space({ size }: SpaceProps): react_jsx_runtime.JSX.Element;
declare namespace Space {
var displayName: string;
}
type Props$2 = {
key?: Key;
/**
* Name of the type, this needs to start with a capital letter.
*/
name: string;
/**
* Does this type need to be exported.
*/
export?: boolean;
/**
* Options for JSdocs.
*/
JSDoc?: JSDoc;
children?: KubbNode;
};
declare function Type({ name, export: canExport, JSDoc, children }: Props$2): react_jsx_runtime.JSX.Element;
declare namespace Type {
var displayName: string;
}
type Props$1 = {
key?: Key;
/**
* Name of the const
*/
name: string;
/**
* Does this type need to be exported.
*/
export?: boolean;
/**
* Type to make the const being typed
*/
type?: string;
/**
* Options for JSdocs.
*/
JSDoc?: JSDoc;
/**
* Use of `const` assertions
*/
asConst?: boolean;
children?: KubbNode;
};
declare function Const({ name, export: canExport, type, JSDoc, asConst, children }: Props$1): react_jsx_runtime.JSX.Element;
declare namespace Const {
var displayName: string;
}
type AppContextProps = {
/**
* Exit (unmount)
*/
readonly exit: (error?: Error) => void;
readonly mode: KubbFile.Mode;
readonly pluginManager: PluginManager;
readonly plugin: Plugin;
};
type Props = {
readonly mode: KubbFile.Mode;
readonly pluginManager: PluginManager;
readonly plugin: Plugin;
readonly children?: KubbNode;
};
declare function App({ plugin, pluginManager, mode, children }: Props): react_jsx_runtime.JSX.Element;
declare namespace App {
var Context: react.Context<AppContextProps | undefined>;
var displayName: string;
}
/**
* `useFile` will return the current file when <File/> is used.
*/
declare function useFile<TMeta extends FileMetaBase = FileMetaBase>(): FileContextProps<TMeta>;
type AppResult<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {
/**
* Exit (unmount)
*/
readonly exit: (error?: Error) => void;
readonly plugin: Plugin<TOptions>;
readonly mode: KubbFile.Mode;
readonly pluginManager: PluginManager;
readonly fileManager: FileManager;
readonly getFile: PluginManager['getFile'];
};
/**
* `useApp` will return the current App with plugin, pluginManager, fileManager and mode.
*/
declare function useApp<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): AppResult<TOptions>;
/**
* `useLifecycle` will return some helpers to exit/restart the generation.
*/
declare function useLifecycle(): {
exit: (error?: Error) => void;
};
export { App, Const, File, Function, Text, Type, createRoot, useApp, useFile, useLifecycle };