UNPKG

@antv/narrative-text-schema

Version:

Json schema of narrative text visualization

64 lines (53 loc) 2.04 kB
import { isObject, isString } from '../utils'; import { EntityType } from '../schema'; import type { SectionSpec, ParagraphSpec, CustomBlockElement, StandardSectionSpec, TextParagraphSpec, BulletsParagraphSpec, HeadingParagraphSpec, PhraseSpec, CustomPhraseSpec, EntityPhraseSpec, TextPhraseSpec, } from '../schema'; export function isCustomSection(spec: SectionSpec): spec is CustomBlockElement { return isObject(spec) && 'customType' in spec; } export function isCustomParagraph(spec: ParagraphSpec): spec is CustomBlockElement { return isObject(spec) && 'customType' in spec; } export function isStandardSection(spec: SectionSpec): spec is StandardSectionSpec { return isObject(spec) && 'paragraphs' in spec && Array.isArray(spec?.paragraphs); } export function isTextParagraph(spec: ParagraphSpec): spec is TextParagraphSpec { return isObject(spec) && spec?.type === 'normal' && Array.isArray(spec?.phrases); } export function isBulletParagraph(spec: ParagraphSpec): spec is BulletsParagraphSpec { return isObject(spec) && spec?.type === 'bullets' && Array.isArray(spec?.bullets); } export function isHeadingParagraph(spec: ParagraphSpec): spec is HeadingParagraphSpec { if (isObject(spec) && 'type' in spec && isString(spec.type)) { const weight = getHeadingWeight(spec?.type); return spec.type.startsWith('heading') && !Number.isNaN(weight); } return false; } export function isCustomPhrase(spec: PhraseSpec): spec is CustomPhraseSpec { return spec?.type === 'custom' && !!spec?.metadata?.customType; } export function isEntityPhrase(spec: PhraseSpec): spec is EntityPhraseSpec { return spec?.type === 'entity' && EntityType.includes(spec?.metadata?.entityType); } export function isTextPhrase(spec: PhraseSpec): spec is TextPhraseSpec { return spec?.type === 'text'; } export function getHeadingWeight(pType: string) { if (pType?.startsWith('heading')) { const weight = Number(pType?.slice(-1)); if (weight >= 1 && weight <= 6) return weight; } return NaN; }