@bookbox/core
Version:
Bookbox — e-book format
50 lines (49 loc) • 2.05 kB
TypeScript
import { BookMeta } from './meta';
import { BookBuilder, BookSchema, BookStore, TokenGetter, BookElement } from './model';
import { BookElements, BookElementsWithoutLevel, ElementNamespace, LevelBookElements } from './elements';
import { ExternalBuilder, ExternalProps } from './external';
import { ResourceOptions } from './resources';
export type BookData<T> = {
tokens: T[];
meta: BookMeta<T>;
store: BookStore<T>;
};
export type CreateBookParams<Token> = {
schema: BookSchema;
builder: BookBuilderParams<Token>;
externalBuilder?: ExternalBuilder<Token>;
resourceOptions?: ResourceOptions;
};
export declare function createBook<Token>({ schema: originalSchema, builder: builderParams, externalBuilder, resourceOptions, }: CreateBookParams<Token>): BookData<Token>;
type SynteticElements = {
text: BookElement<'text', {
raw: string;
}>;
page: BookElement<'page', {
count: number;
}>;
error: BookElement<'error', {
props: Record<string, any>;
name: string;
error: string;
}>;
empty: BookElement<'empty'>;
};
type TokenGetterList<T extends Record<keyof T, BookElement<string>>, Token> = {
[Name in keyof T]: TokenGetter<T[Name]['props'], Token>;
};
export type BookBuilderParams<Token> = {
elements: TokenGetterList<Omit<BookElements, `${ElementNamespace}.${string}`>, Token> & {
format: TokenGetterList<BookElementsWithoutLevel<LevelBookElements<'format'>, 'format'>, Token>;
web: TokenGetterList<BookElementsWithoutLevel<LevelBookElements<'web'>, 'web'>, Token>;
};
synteticElements: TokenGetterList<SynteticElements, Token>;
};
export declare function createBookBuilder<Token>({ elements, synteticElements, }: BookBuilderParams<Token>): BookBuilder<Token, ExternalProps>;
type BookExternalBuilderParams<Token> = {
element: ExternalBuilder<Token>;
};
export declare function createBookExternalBuilder<Token>({ element }: BookExternalBuilderParams<Token>): {
externalBuilder: ExternalBuilder<Token>;
};
export {};