@notion-md-converter/types
Version:
Notion to Markdown Converter Types
108 lines (107 loc) • 4.88 kB
TypeScript
import type { ApiColor, Block, BookmarkBlock, BreadcrumbBlock, BulletedListItemBlock, CalloutBlock, ChildDatabaseBlock, ChildPageBlock, CodeBlock, ColumnListBlock, DividerBlock, EmbedBlock, EquationBlock, FileBlock, Heading1Block, Heading2Block, Heading3Block, ImageBlock, LinkPreviewBlock, NumberedListItemBlock, ParagraphBlock, PdfBlock, QuoteBlock, RichText, SyncedBlock, TableBlock, TableOfContentsBlock, ToDoBlock, ToggleBlock, VideoBlock } from "./notion";
/**
* アノテーションの有効設定
*/
export type EnableAnnotations = {
bold?: boolean;
italic?: boolean;
strikethrough?: boolean;
underline?: boolean;
code?: boolean;
equation?: boolean;
color?: boolean;
link?: boolean;
};
/**
* カラーマッピング
*/
export type ColorMap = Record<ApiColor, string | undefined>;
/**
* リッチテキストをフォーマットするツールのインターフェース
*/
export interface RichTextFormatter {
/**
* リッチテキストを整形する
* @param richTexts リッチテキスト配列
* @param enableAnnotations 有効化するアノテーション
* @param colorMap カラーマップ
* @returns 整形されたテキスト
*/
format(richTexts: RichText[], enableAnnotations?: EnableAnnotations, colorMap?: ColorMap): string;
/**
* デコレーションを除いたテキスト
* @param richTexts リッチテキスト配列
* @returns テキスト
*/
plainText(richTexts: RichText[]): string;
}
/**
* 変換に使用するツール群
*/
export interface ConverterTools {
/**
* リッチテキストフォーマッター
*/
richTextFormatter: RichTextFormatter;
}
export type Context<T extends Block> = {
execute: (blocks: Block[]) => string;
blocks: Block[];
currentBlock: T;
currentBlockIndex: number;
tools: ConverterTools;
};
export type NotionBlockTransformer<T extends Block> = (context: Context<T>) => string | null;
export type BookmarkTransformer = NotionBlockTransformer<BookmarkBlock>;
export type BreadcrumbTransformer = NotionBlockTransformer<BreadcrumbBlock>;
export type CalloutTransformer = NotionBlockTransformer<CalloutBlock>;
export type CodeTransformer = NotionBlockTransformer<CodeBlock>;
export type ColumnListTransformer = NotionBlockTransformer<ColumnListBlock>;
export type DividerTransformer = NotionBlockTransformer<DividerBlock>;
export type EquationTransformer = NotionBlockTransformer<EquationBlock>;
export type HeadingTransformer = NotionBlockTransformer<Heading1Block | Heading2Block | Heading3Block>;
export type LinkPreviewTransformer = NotionBlockTransformer<LinkPreviewBlock>;
export type BulletedListItemTransformer = NotionBlockTransformer<BulletedListItemBlock>;
export type NumberedListItemTransformer = NotionBlockTransformer<NumberedListItemBlock>;
export type ToDoTransformer = NotionBlockTransformer<ToDoBlock>;
export type ParagraphTransformer = NotionBlockTransformer<ParagraphBlock>;
export type QuoteTransformer = NotionBlockTransformer<QuoteBlock>;
export type SyncedBlockTransformer = NotionBlockTransformer<SyncedBlock>;
export type TableOfContentsTransformer = NotionBlockTransformer<TableOfContentsBlock>;
export type TableTransformer = NotionBlockTransformer<TableBlock>;
export type ToggleTransformer = NotionBlockTransformer<ToggleBlock>;
export type ChildDatabaseTransformer = NotionBlockTransformer<ChildDatabaseBlock>;
export type ChildPageTransformer = NotionBlockTransformer<ChildPageBlock>;
export type VideoTransformer = NotionBlockTransformer<VideoBlock>;
export type EmbedTransformer = NotionBlockTransformer<EmbedBlock>;
export type PDFTransformer = NotionBlockTransformer<PdfBlock>;
export type FileTransformer = NotionBlockTransformer<FileBlock>;
export type ImageTransformer = NotionBlockTransformer<ImageBlock>;
export type UnsupportedBlockTransformer = NotionBlockTransformer<Block>;
export type TransformerMapping = {
bookmark?: BookmarkTransformer;
breadcrumb?: BreadcrumbTransformer;
callout?: CalloutTransformer;
code?: CodeTransformer;
column_list?: ColumnListTransformer;
divider?: DividerTransformer;
equation?: EquationTransformer;
heading?: HeadingTransformer;
link_preview?: LinkPreviewTransformer;
bulleted_list_item?: BulletedListItemTransformer;
numbered_list_item?: NumberedListItemTransformer;
to_do?: ToDoTransformer;
paragraph?: ParagraphTransformer;
quote?: QuoteTransformer;
synced_block?: SyncedBlockTransformer;
table_of_contents?: TableOfContentsTransformer;
table?: TableTransformer;
toggle?: ToggleTransformer;
child_database?: ChildDatabaseTransformer;
child_page?: ChildPageTransformer;
video?: VideoTransformer;
embed?: EmbedTransformer;
pdf?: PDFTransformer;
file?: FileTransformer;
image?: ImageTransformer;
};