dumi
Version:
📖 Documentation Generator of React Component
160 lines (159 loc) • 5.95 kB
TypeScript
import type { BaseAtomAssetsParser as IAtomAssetsParser } from "./assetParsers/BaseParser";
import type { IParsedBlockAsset } from "./assetParsers/block";
import type { IDumiDemoProps } from "./client/theme-api/DumiDemo";
import type { ILocalesConfig, IThemeConfig } from "./client/theme-api/types";
import type { IContentTab } from "./features/tabs";
import type { IThemeLoadResult } from "./features/theme/loader";
import { OnLoadArgs, OnLoadResult } from '@umijs/bundler-utils/compiled/esbuild';
import type { IModify } from '@umijs/core';
import type { AssetsPackage, ExampleBlockAsset } from 'dumi-assets-types';
import type { Element } from 'hast';
import type { IApi as IUmiApi, defineConfig as defineUmiConfig } from 'umi';
type Subset<K> = {
[attr in keyof K]?: K[attr] extends Array<any> ? K[attr] : K[attr] extends Function | undefined ? K[attr] : K[attr] extends object ? Subset<K[attr]> : K[attr] extends object | null ? Subset<K[attr]> | null : K[attr] extends object | null | undefined ? Subset<K[attr]> | null | undefined : K[attr];
};
type NoStringIndex<T> = {
[K in keyof T as string extends K ? never : K]: T[K];
};
type IUmiConfig = Omit<NoStringIndex<Parameters<typeof defineUmiConfig>[0]>, 'resolve' | 'extraRemarkPlugins' | 'extraRehypePlugins' | 'themeConfig'>;
interface IDumiExtendsConfig {
resolve: {
docDirs: (string | {
type?: string;
dir: string;
})[];
atomDirs: {
type: string;
subType?: string;
dir: string;
}[];
codeBlockMode: 'active' | 'passive';
entryFile?: string;
forceKebabCaseRouting: boolean;
};
locales: ILocalesConfig;
themeConfig: IThemeConfig;
autoAlias?: boolean;
/**
* extra unified plugins
*/
extraRemarkPlugins?: (string | Function | [string | Function, object])[];
extraRehypePlugins?: (string | Function | [string | Function, object])[];
}
export type IDumiConfig = Omit<IUmiConfig, 'locales'> & IDumiExtendsConfig;
export type IDumiUserConfig = Subset<Omit<IDumiConfig, 'locales'>> & {
locales?: Exclude<IDumiConfig['locales'][0], {
base: string;
}>[] | Omit<Exclude<IDumiConfig['locales'][0], {
suffix: string;
}>, 'base'>[];
[key: string]: any;
};
export interface IDumiTechStackOnBlockLoadResult {
content: string;
type: Required<OnLoadResult>['loader'];
}
export type IDumiTechStackOnBlockLoadArgs = OnLoadArgs & {
entryPointCode: string;
filename: string;
};
export interface IDumiTechStackRuntimeOpts {
/**
* Component detection function path,
* used to detect errors that occur from application creation to component mounting.
*/
preflightPath?: string;
/**
* path of the cancelable{@link IDemoCancelableFn} function
* that manipulate(mount/unmount) third-party framework component
*/
rendererPath?: string;
/**
* path to runtime compile function module
*/
compilePath?: string;
/**
* path to runtime plugin for this tech stack
*/
pluginPath?: string;
}
export declare abstract class IDumiTechStack {
/**
* tech stack name, such as 'react'
*/
abstract name: string;
/**
* runtime options
*/
abstract runtimeOpts?: IDumiTechStackRuntimeOpts;
/**
* Is the lang supported by the current tech stack?
* @param lang
* @param node hast Element https://github.com/syntax-tree/hast?tab=readme-ov-file#element
*/
abstract isSupported(node: Element, lang: string): boolean;
/**
* transform for parse demo source to expression/function/class
*/
abstract transformCode(raw: string, opts: {
type: 'external' | 'code-block';
fileAbsPath: string;
}): string;
/**
* generator for return asset metadata
*/
abstract generateMetadata?(asset: ExampleBlockAsset, opts: {
type: Parameters<IDumiTechStack['transformCode']>[1]['type'];
mdAbsPath: string;
fileAbsPath?: string;
entryPointCode?: string;
}): Promise<ExampleBlockAsset> | ExampleBlockAsset;
/**
* generator for return previewer props
*/
abstract generatePreviewerProps?(props: IDumiDemoProps['previewerProps'], opts: Parameters<NonNullable<IDumiTechStack['generateMetadata']>>[1]): Promise<IDumiDemoProps['previewerProps']> | IDumiDemoProps['previewerProps'];
/**
* generator for return file path of demo source
*/
abstract generateSources?(source: IParsedBlockAsset['resolveMap'], opts: Parameters<NonNullable<IDumiTechStack['generateMetadata']>>[1]): Promise<IParsedBlockAsset['resolveMap']> | IParsedBlockAsset['resolveMap'];
/**
* Use current function as onLoad CallBack(https://esbuild.github.io/plugins/#on-load)
* @description
* Why use this method?
* By default, dumi can only support the parsing of js/ts related code blocks,
* but many front-end frameworks have custom extensions,
* so this method is provided to facilitate developers to convert codes.
*/
abstract onBlockLoad?(args: IDumiTechStackOnBlockLoadArgs): IDumiTechStackOnBlockLoadResult | null;
}
export type IApi = IUmiApi & {
config: IDumiConfig & {
[key: string]: any;
};
userConfig: IDumiUserConfig;
service: IUmiApi['service'] & {
themeData: IThemeLoadResult;
atomParser: IAtomAssetsParser;
};
/**
* register a new tech stack
*/
registerTechStack: (fn: () => IDumiTechStack) => void;
/**
* modify original theme data
*/
modifyTheme: IModify<IThemeLoadResult, null>;
/**
* add content tab
*/
addContentTab: (fn: () => IContentTab) => void;
/**
* modify assets metadata
*/
modifyAssetsMetadata: IModify<AssetsPackage, null>;
/**
* get assets metadata
*/
getAssetsMetadata?: () => Promise<AssetsPackage>;
};
export {};